人的一切痛苦,本质上都是对自己的无能的愤怒。——王小波
我们clone
下来mybatis-plus
官方示例项目:
https://gitee.com/baomidou/mybatis-plus-samples.git
首先看文档:
@Data
@Accessors(chain = true)
@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;
}
该注解对应了 XML 中写法为
<resultcolumn="other_info"jdbcType="VARCHAR"property="otherInfo"typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
文档表明,首先要加@TableName(autoResultMap = true)
注解,然后再指定typeHandler
打开示例项目,可以看到确实如此
并且我们数据库表里的数据wallets
字段为json
我们运行测试类测试一下:
得到的结果也是完美映射
可以看到我们这里也能自定义转换器
他这里是jackson
的,如果我们要使用fastjson
的,则可以继承fastjsonTypeHandler
package com.baomidou.mybatisplus.samples.typehandler;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import com.baomidou.mybatisplus.samples.typehandler.entity.Wallet;
import java.util.List;
/**
* 自定义复杂类型处理器<br/>
* 不要问我为什么要重写 parse 因为顶层父类是无法获取到准确的待转换复杂返回类型数据
*/
public class WalletListTypeFastJsonHandler extends FastjsonTypeHandler {
public WalletListTypeFastJsonHandler(Class<?> type) {
super(type);
}
@Override
protected Object parse(String json) {
return JSON.parseObject(json, new TypeReference<List<Wallet>>() {
});
}
}
测试了下,成功转换