赞
踩
对象和集合分两种情况处理,目前我用的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(typeHandler = FastjsonTypeHandler.class)
//@TableField(typeHandler = JacksonTypeHandler.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);
}
@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中
<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.ProjectScholarshipDeclarationCompaniesProjectEntity$CompaniesProject"/>
</resultMap>
</mapper>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。