当前位置:   article > 正文

MyBatis-plus处理存储json数据_autoresultmap = true

autoresultmap = true

对象和集合分两种情况处理,目前我用的MP的版本是3.4.2

1、如果是对象,直接用MP内置的Handler,JacksonTypeHandler或FastjsonTypeHandler法定

@TableField(typeHandler = FastjsonTypeHandler.class)
//@TableField(typeHandler = JacksonTypeHandler.class)
private CompaniesProject companiesProject;
  • 1
  • 2
  • 3

然后 增加上 autoResultMap = true 属性,数据库字段companies_project mysql可以用json类型,没有就用字符类型,就可以了

@TableName(value = "table_name",autoResultMap = true)
  • 1

2、如果需要转换的是List集合,那么目前MP自带的Handler就不行,它只能处理对象,不能处理集合,需要进行改造

下面这种会转换失败,直接报错的

@TableField(typeHandler = FastjsonTypeHandler.class)
//@TableField(typeHandler = JacksonTypeHandler.class)
private List<CompaniesProject> companiesProjectList;
  • 1
  • 2
  • 3

需要把这段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);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

这样还不行,因为MP不知为何解析不了CompaniesProject 类型,需要明确告诉MP的class类型

修改 @TableName,增加resultMap

@TableName(value = "table_name",resultMap = "com.xx.xx.xxDao.selectResultMap")
  • 1

在对应的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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/1012913
推荐阅读
相关标签
  

闽ICP备14008679号