MyBatis-plus处理存储json数据

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值