Mybatis Plus Json格式字段的映射

Mybatis Plus Json格式字段的映射

1.entity

需要在类添加注解@TableName(autoResultMap = true)

需要在字段上添加注解 @TableField(typeHandler = JacksonTypeHandler.class)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Data
@TableName(autoResultMap = true)
public class User {
private Long id;

...
/**
* 注意!! 必须开启映射注解
*
* @TableName(autoResultMap = true)
*
* 以下两种类型处理器,二选一 也可以同时存在
*
* 注意!!选择对应的 JSON 处理器也必须存在对应 JSON 解析依赖包
*/
@TableField(typeHandler = JacksonTypeHandler.class)
// @TableField(typeHandler = FastjsonTypeHandler.class)
private OtherInfo otherInfo;

}

2.XML文件

需要在ResultMap的列中添加

1
<result column="other_info" jdbcType="VARCHAR" property="otherInfo" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />

若需要在xml写SQL查询Json字段,一定要在返回类型写 resultMap = "上面修改的resultMapId"

3.Mapper.java

如果要使用lambdaquery更新字段,在调用Set方法时,需要添加参数String mapping

1
2
3
4
5
6
default Boolean updateBrandIndexSetting(User user) {
return new LambdaUpdateChainWrapper<>(this)
.eq(User::getId, user.getId())
.set(User::getOtherInfo, appAccount.getOtherInfo(),"com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler")
.update();
}

踩坑

通过XML写SQL语句时,返回的json格式字段无法映射为对象,返回null

在Mapper.java里面写LambdaQuery时,只要实体类定义了autoMap = true就可以正确解析json对象.

而在xml里面写Sql时,需要指定返回类型为resultMap,且resultMap设置了typeHandler

1
2
3
<select id="getUserList" resultMap="BaseResultMap">
select * from User
<select>

评论