Mybatis在数据库使用json字段到java实体的映射

[复制链接]
发表于 2026-1-26 10:11:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
前言

当前的一些数据库是是支持Json格式的字段的,我们使用时映射到Java实体也是用JSONObject范例(Json实体类)汲取如许就大大镌汰创建创建实体的繁琐,更方便和机动数据传输和存储
在MyabatisPlus中有相应的注解可以或许实现JSONObject范例字段到数据库json范例字段的映射。但是当我们的查询有联表的需求必要写xml去查询,MyabatisPlus的注解就失效了,我们只能用Mybatis上的功能,这时间我们就必要指定typeHandler。操纵如下:
一、具体操纵

实体界说:
  1. import cn.hutool.json.JSONObject;
  2. /**
  3. * Description: new java files header..
  4. *
  5. * @author hacah
  6. * @version 1.0
  7. * @date 2024/9/4 15:38
  8. */
  9. @Data
  10. @ToString
  11. public class StatisticDTO {
  12.     private JSONObject plotDefaultOptions;
  13.    
  14. }
复制代码
JSONObject使用的是hutool工具包的类。
mapper.xml如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.oriseq.mapper.StatisticMapper">
  6.     <resultMap id="ExtendResultMap" type="com.oriseq.dtm.dto.StatisticDTO">
  7.         <id property="id" column="id" jdbcType="INTEGER"/>
  8.       <result property="plotDefaultOptions" column="plot_default_options" javaType="cn.hutool.json.JSONObject" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
  9.     </resultMap>
  10.     <select id="selectExtend" resultMap="ExtendResultMap">
  11.         select s.*,spt.name plot_name  from statistic s
  12.             left join statistic_plot_type spt on s.plot_type_id = spt.id
  13.     </select>
  14. </mapper>
复制代码
重点是我们查询的时间,界说plotDefaultOptions的javaType=“cn.hutool.json.JSONObject”,这是我们绑定在java中的json类。typeHandler=“com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler”,这是mybatisPlus写好的handlers以是我们不消自己写。如许就能实现查询时把数据映射到plotDefaultOptions里。
假如你没有依靠mybatisplus,那就自己实现一个TypeHandler
二、MyabatisPlus上的实现

假如是调用MyabatisPlus的查询(比如:service.getById())直接在实体中添加注解
  1. package com.oriseq.dtm.dto;
  2. import cn.hutool.json.JSONArray;
  3. import cn.hutool.json.JSONObject;
  4. import com.baomidou.mybatisplus.annotation.TableField;
  5. import com.baomidou.mybatisplus.annotation.TableName;
  6. import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
  7. import com.oriseq.dtm.entity.Statistic;
  8. import jakarta.validation.constraints.NotNull;
  9. import jakarta.validation.constraints.Size;
  10. import lombok.Data;
  11. import lombok.ToString;
  12. import org.hibernate.validator.constraints.Length;
  13. import java.time.LocalDateTime;
  14. /**
  15. * Description: new java files header..
  16. *
  17. * @author hacah
  18. * @version 1.0
  19. * @date 2024/9/4 15:38
  20. */
  21. @Data
  22. @ToString
  23. @TableName(value = "statistic", autoResultMap = true)
  24. public class StatisticDTO {
  25.     /**
  26.      * id
  27.      */
  28.     private Integer id;
  29.     @NotNull
  30.     @TableField(typeHandler = JacksonTypeHandler.class)
  31.     private JSONObject plotDefaultOptions;
  32. }
复制代码
放类上的 @TableName(autoResultMap = true)和放方法上的 @TableField(typeHandler = JacksonTypeHandler.class)
参考或相干文章


  • https://blog.csdn.net/weixin_56793669/article/details/128446238

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表