MyBatis-Plus 使用 JacksonTypeHandler 存取 JSON 字段
MyBatis-Plus 使用 JacksonTypeHandler 存取 JSON 字段
问题现象
- 数据库字段存的是 JSON 字符串(如
["1","2"]) - 实体类使用
JacksonTypeHandler作为typeHandler - 查询返回 null
常见原因
-
数据库字段类型不对
- 建议使用
json(MySQL 5.7+) - 也可以是
text/varchar,但必须存标准 JSON。
✅ 正确:["1","2","3"]
❌ 错误:1,2,3
- 建议使用
-
实体类没加
autoResultMap@TableName(value = "dm_device_type", autoResultMap = true) public class DmDeviceType { ... }如果不加,
TypeHandler不会生效,结果是null。 -
MyBatis-Plus 版本太低
JacksonTypeHandler需要 3.5.2+ 版本。- 低版本不会自动处理 JSON,直接返回
null。
-
JSON 格式与泛型不一致
- 字段是
List<String>→ 数据库必须存["1","2"] - 如果存的是
["1",2]或者[1,2],会反序列化失败。
- 字段是
正确写法
实体类
@TableName(value = "dm_device_type", autoResultMap = true)
public class DmDeviceType {
@TableField(value = "alert_method", typeHandler = JacksonTypeHandler.class)
private List<String> alertMethod;
}
数据库存储
insert into dm_device_type(id, alert_method)
values('123', '["1","2","3"]');
查询结果
DmDeviceType deviceType = dmDeviceTypeMapper.selectById("123");
System.out.println(deviceType.getAlertMethod());
// 输出: [1, 2, 3]
排查步骤
- 确认 MyBatis-Plus 版本 ≥ 3.5.2
- 确认实体类加了
autoResultMap = true - SQL 手动查询,确认字段是标准 JSON 格式
- 确认字段泛型与存储 JSON 数据类型匹配

浙公网安备 33010602011771号