本文主要是介绍MyBatis-plus处理存储json数据过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F...
对象和集合分两种情况处理,目前我用的MP的版本是3.4.2
1、如果是对象
直接用MP内置的Handler,JacksonTypeHandler或FastjsonTypeHandler
@TableField(typeHandler = FastjsonTypeHandler.class) //@TableField(typeHandler = JacksonTypeHandler.class) private CompaniesProject companiesProject;
然后 增加上 autoResultMap = true 属性,数据库字段companies_project mysql可以用json类型,没有就用字符类型,就可以了
@TableName(value = "table_name",autoResultMap = true)
2、如果需要转换的是List集合
那么目前MP自带的Handler就不行,它只能处理对象,不能处理集合,需要进行改造
下面这种会转换失败,直接报错的
@TableField(typeHanandroiddler = FastjsonTypeHandler.class)
//@TableField(typeHandler = Jackswww.chinasem.cnonTypeHandler.class)
private List<CompaniesProject> companiesProjectList;需要把这段JSON.parseobject 改为解析集合的方法 JSON.parseArray

新建一个自定义处理器,然后继承 FastjsonTypeHandler ,重载parse方法
public class JSONTypeHandler extends FastjsonTypeHandler {
private final Class<? extends Object> type;
public JSONTypeHandler(Class<?> type) {
super(type);
this.type = type;
}
@Override
protected List parse(String json) {
return JSON.parseArray(json, type);
// return JSON.parseObject(json, type);
}javascript
@Override
protected String toJson(Object obj) {
return super.toJson(obj);
}
}这样还不行,因为MP不知为何解析不了 CompaniesProject 类型,需要明确告诉MP的class类型
修改 @TableName,增加resultMap
@TableName(value = "table_name",resultMap = "com.xx.xx.xxDao.selectResultMap")
在对应的dao XML中www.chinasem.cn
<mapper namespace="com.xx.xx.xxDao">
<resultMap id="selectResultMap" type="com.xx.xx.xx.ProjectScholarshipDeclarationCompaniesProjectEntity">
<result property="companiesProjectList" column="companies_project_list" typeHandler="com.xx.common.handler.JSONTypeHandler" JavaType="com.xx.xx.ProjectandroidScholarshipDeclarationCompaniesProjectEntity$CompaniesProject"/>
</resultMap>
</mapper>总结
这篇关于MyBatis-plus处理存储json数据过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!