java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > MyBatis-plus处理存储json数据

MyBatis-plus处理存储json数据过程

作者:Wang__dream

文章介绍MyBatis-Plus 3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承FastjsonTypeHandler并重写parse方法,同时需明确指定类类型及XML中的resultMap以解决转换问题

对象和集合分两种情况处理,目前我用的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>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文