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

 更新时间:2025年08月28日 09:50:43   作者: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>

总结

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

相关文章

  • idea将Springboot项目打war包部署到tomcat服务器上实现步骤

    idea将Springboot项目打war包部署到tomcat服务器上实现步骤

    本文详细介绍了如何使用IntelliJ IDEA将Spring Boot项目打包成WAR文件并部署到Tomcat服务器上,步骤包括创建项目、修改pom.xml文件、进行打包、将WAR文件复制到Tomcat的webapps目录,并手动启动Tomcat服务器进行访问
    2025-11-11
  • JAVA Frame 窗体背景图片,首位相接滚动代码实例

    JAVA Frame 窗体背景图片,首位相接滚动代码实例

    这篇文章主要介绍了JAVA Frame 窗体背景图片,首位相接滚动代码示例,需要的朋友可以参考下复制代码
    2017-04-04
  • 如何基于Spring使用工厂模式实现程序解耦

    如何基于Spring使用工厂模式实现程序解耦

    这篇文章主要介绍了如何基于Spring使用工厂模式实现程序解耦,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • spring中使用Mockito解决Bean依赖树问题方法

    spring中使用Mockito解决Bean依赖树问题方法

    在本篇文章里小编给各位整理了关于spring中使用Mockito解决Bean依赖树问题方法,有需要的朋友们可以参考下。
    2020-01-01
  • Maven中生命周期的具体使用

    Maven中生命周期的具体使用

    在 Maven 出现之前,项目构建的生命周期就已经存在,本文主要介绍了Maven中生命周期的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • java 中break如何跳出外部循环

    java 中break如何跳出外部循环

    这篇文章主要介绍了java 中break如何跳出外部循环,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Spring 静态变量/构造函数注入失败的解决方案

    Spring 静态变量/构造函数注入失败的解决方案

    我们经常会遇到一下问题:Spring对静态变量的注入为空、在构造函数中使用Spring容器中的Bean对象,得到的结果为空。不要担心,本文将为大家介绍如何解决这些问题,跟随小编来看看吧
    2021-11-11
  • java之左旋转字符串介绍

    java之左旋转字符串介绍

    java之左旋转字符串介绍,需要的朋友可以参考一下
    2013-02-02
  • Java技巧:快速获取图片拍摄时间

    Java技巧:快速获取图片拍摄时间

    想知道如何用Java读取图片的拍摄时间吗?在这篇指南中,我将向你展示如何利用Java编程语言轻松获取图像的拍摄时间信息,不要错过这个简单而有用的技巧!
    2023-12-12
  • java 设计模式之单例的实例详解

    java 设计模式之单例的实例详解

    这篇文章主要介绍了java 设计模式之单例的实例详解的相关资料, 希望通过本文能帮助到大家,让大家彻底理解掌握单例模式,需要的朋友可以参考下
    2017-09-09

最新评论