使用mybatisplus接收mysql字段为json类型的数据
一.数据库设计
二.实体类(切记实体类@TableName一定要加上autoResultMap = true属性,否则查不出来该属性的值)
1.如果接收参数是实体类或List<String>,可以直接使用mybatisplus自带的解析处理器即可,例如在属性上添加
@TableField(typeHandler = FastjsonTypeHandler.class)
此处FastjsonTypeHandler有多个类型可供选择:比如AbstractJsonTypeHandler,AbstractSqlParserHandler,FastjsonTypeHandler,GsonTypeHandler,JacksonTypeHandler,MybatisEnumTypeHandler
2.如果接收参数是个List<实体类>,这里需要注意:以上提供的解析器不能提供完全解析,这里你需要自定义解析器做定制化解析,以下是解析器的源码
原因:type属性被注入进来的只是List的字节码文件,通过parse方法只能将json转化为List<JsonObject>对象,而JsonObject不能强转为相应的实体类,所以在获取到解析后的对象遍历的时候会报类型转换错误异常,这时可以重写此handler的parse方法来实现自己的目的,以下是将json转化为List<Option>的处理器
/** * 自定义CardContent转换处理类 * @author Administrator */ public class OptionHandler extends FastjsonTypeHandler { public OptionHandler(Class<?> type) { super(type); } @Override protected Object parse(String json) { return JSON.parseArray(json, Option.class); } @Override protected String toJson(Object obj) { return super.toJson(obj); } }
添加完成后只需在实体类的对应属性上添加注解
@TableField(typeHandler = OptionHandler.class)即可实现解析
如果使用了xml文件可参考以下方式
<result column="options" property="options" jdbcType="VARCHAR" typeHandler="com.innovation.desk.handler.OptionHandler"/>