Mybatisplus如何存储List、Map
更新时间:2024年01月15日 09:05:10 作者:timi先生
这篇文章主要介绍了Mybatisplus如何存储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)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
java poi设置生成的word的图片为上下型环绕以及其位置的实现
这篇文章主要介绍了java poi设置生成的word的图片为上下型环绕以及其位置的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-09-09
Spring + Mybatis 项目实现动态切换数据源实例详解
这篇文章主要介绍了Spring + Mybatis 项目实现动态切换数据源的相关资料,需要的朋友参考下吧2017-04-04
Java Synchronize下的volatile关键字详解
这篇文章主要介绍了Java Synchronize下的volatile关键字详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-03-03
Java对象池pool2分析PooledObjectFactory过程
文章介绍了Java中对象池化技术的背景,以Apache的Pool2库为例,详细讲解了GenericObjectPool的构造函数参数和PooledObjectFactory接口的实现,通过商场里的共享充电宝的比喻,说明了池化思维的应用2025-02-02


最新评论