Mybatis plus 存储 List、Map

简介: Mybatis plus 存储 List、Map、自定义类型

一、前提概要

1.1 支持环境

数据库支持:MySql版本要求 5.7+

1.2 需求场景

使用MySQL数据库存储时,由于业务要求实体类中特定字段需要使用 自定义类型或者List、Map类型。

二、需求实现

2.1 非自定义数据类型,List、Map

首先:在需要转换的实体类字段上加上:

@TableField(typeHandler = JacksonTypeHandler.class)

接着:在该实体类上修改 @TableName

@TableName(value = "数据库表名",autoResultMap = true)

2.2 自定义类型数据类型

引入依赖:

<properties>
 <jackson-core.version>2.12.6</jackson-core.version>
 <jackson-databind.version>2.12.7.1</jackson-databind.version>
 <jackson-annotations.version>2.15.2</jackson-annotations.version>
</properties>

 <dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-core</artifactId>
   <version>${jackson-core.version}</version>
 </dependency>
 <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson-databind.version}</version>
 </dependency>
 <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>${jackson-annotations.version}</version>
</dependency>

首先定义数据处理工具类:

@Component
public class ObjectToJackson {
    private static ObjectMapper mapper;

    @Resource
    public void setMapper(ObjectMapper mapper) {
        ObjectToJackson.mapper = mapper;
    }

    public static <T> String objectToJson(T o) {
        try {
            return ObjectToJackson.mapper.writeValueAsString(o);
        } catch (Exception e) {
            e.printStackTrace();
            throw new ServerException(500);
        }
    }

    public static <T> T jsonToObject(String s, TypeReference<T> typeReference) {
        if (s == null) {
            return null;
        }
        try {
            return ObjectToJackson.mapper.readValue(s, typeReference);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            throw new ServerException(500);
        }
    }
}

接着定义自己的转化规则:

public class ObjectToJacksonHandler extends BaseTypeHandler<Object> {

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
        String json = ObjectToJackson.objectToJson(parameter);
        ps.setString(i, json);
    }

    @Override
    public Object getNullableResult(ResultSet rs, String columnName) throws SQLException {
        String string = rs.getString(columnName);
        return ObjectToJackson.jsonToObject(string, new TypeReference<>() {
        });
    }

    @Override
    public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        String string = rs.getString(columnIndex);
        return ObjectToJackson.jsonToObject(string, new TypeReference<>() {
        });
    }

    @Override
    public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        String string = cs.getString(columnIndex);
        return ObjectToJackson.jsonToObject(string, new TypeReference<>() {
        });
    }
}

使用:

@TableName(value = "数据库表名", autoResultMap = true)

@TableField(typeHandler = ObjectToJacksonHandler.class)
目录
相关文章
|
4月前
|
Dart
Dart之集合详解(List、Set、Map)
Dart之集合详解(List、Set、Map)
|
5天前
|
算法
你对Collection中Set、List、Map理解?
你对Collection中Set、List、Map理解?
17 5
|
2月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
3月前
|
Java 数据库连接 测试技术
mybatis plus 获取新增实体的主键
mybatis plus 获取新增实体的主键
77 8
|
3月前
|
Java 数据库连接 数据库
mybatis plus 更新值为null的字段
mybatis plus 更新值为null的字段
48 7
|
3月前
|
Java 数据库连接 Spring
搭建 spring boot + mybatis plus 项目框架并进行调试
搭建 spring boot + mybatis plus 项目框架并进行调试
66 4
|
3月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
59 3
|
3月前
|
Java 数据库连接 数据库
mybatis plus 中增删改查及Wrapper的使用
mybatis plus 中增删改查及Wrapper的使用
96 3
|
2月前
|
存储 Java 索引
|
3月前
|
算法 Java 数据库连接
mybatis plus 主键策略
mybatis plus 主键策略
36 2
下一篇
无影云桌面