1.首先是新建一个JsonTypeHandler.class
import com.alibaba.fastjson.JSON;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JsonTypeHandler<T> extends BaseTypeHandler<T> {
private Class<T> clazz;
//构造函数 --- >接收一个 Class 对象作为参数,用于指定处理的数据类型。
public JsonTypeHandler(Class<T> clazz) {
this.clazz = clazz;
}
public JsonTypeHandler() {
}
//插入数据将任何类型转换为json
@Override
public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, JSON.toJSONString(parameter));
}
//获取数据json转换类型
@Override
public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
return JSON.parseObject(rs.getString(columnName), clazz);
}
@Override
public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return null;
}
@Override
public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return null;
}
}
2. 对应字段指定该 typeHandle
mybatis-plus 实现(代码片段)
配置点一:
@TableName(value = "hz_font_course", autoResultMap = true)
public class XXXXXXTable
配置二:
@ApiModelProperty(value = "课程字库")
@TableField(value = "course_chapters", typeHandler = JsonTypeHandler.class)
private List<HzFontChapterBo> courseChapters;
Mapper.xml 主要使用是在xml中配置类型 typeHandler=“com.by.config.JsonTypeHandler”
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<-- -->
<mapper namespace="com.by.dao.UserDao">
<resultMap id="UserMap" type="com.by.moder.User">
<result property="id" column="id"/>
<result property="addressBook" column="addressBook" typeHandler="com.by.config.JsonTypeHandler"/>
<result property="friendAddress" column="friendAddress" typeHandler="com.by.config.JsonTypeHandler"/>
<result property="pet" column="pet" typeHandler="com.by.config.JsonTypeHandler"/>
</resultMap>
<insert id="add">
insert into user2 (name, addressBook, friendAddress,pet)
values (#{name}, #{addressBook,typeHandler=com.by.config.JsonTypeHandler}, #{friendAddress,typeHandler=com.by.config.JsonTypeHandler},#{pet,typeHandler=com.by.config.JsonTypeHandler})
</insert>
<select id="select" resultMap="UserMap">
select * from user2
</select>
</mapper>
3.效果
新增
查询