数据库JSON类型到映射JAVA上

Mysql存放JSON数据如何映射JAVA实体类

概述:最近写在写SKU模块中,需要表中字段存放JSON类型数据,mybatis-plus在查询的时候如何跟JSON类型所匹配呢?再次记录一下。

直接上代码,后面有解释到底如何映射上的。

Mysql表数据

在这里插入图片描述

JAVA实体类

@Data
public class TSku {private Long id;private Long bookId;private Long inventory;private BigDecimal oldPrice;private String picture;private BigDecimal price;private String skuCode;// 自定义类型处理器,表示java类型与数据库类型双向转换@TableField(typeHandler = FastjsonTypeHandler.class)private JSONObject skuProperties;private String specs1;private String specsValue1;private String specs2;private String specsValue2;// 自定义类型处理器,表示java类型与数据库类型双向转换@TableField(typeHandler = FastjsonTypeHandler.class)private JSONArray skuPropertiesName;@TableField(exist = false)private List<SkusSpec> specs;
}

XML查询SQL

<select id="getTSkuList" resultMap="skuList">select * from t_skuwhere book_id = #{bookId}</select><resultMap id="skuList" type="org.dromara.library.domain.TSku"><!-- 转换JSONObject--><result column="sku_properties"property="skuProperties"jdbcType="OTHER" javaType="com.alibaba.fastjson.JSONObject"typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler" /><!-- 转换JSONArray--><result column="sku_properties_name"property="specs"jdbcType="OTHER" javaType="com.alibaba.fastjson.JSONArray"typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler" /></resultMap>
属性名称作用
column数据库表中列名
propertyJava实体类中的属性名
jdbcType数据库字段的JDBC类型,这里是OTHER表示字段的类型不是JDBC标准类型
javaType映射到Java实体类属性类型
typeHandler自定义类型处理器,主要负责Java类型和JDBC类型之间进行转换

java返回结果展示

"code": 200,"msg": "操作成功","data": [{"id": 1,"bookId": 11,"inventory": 10,"oldPrice": "100.00","picture": "http://xx.xx.xxx.xx:xx/ttbook/2024/02/28/bc4d02cc21974b85aceb9c4aa55b8b66.jpg","price": "49.00","skuCode": "TT001","skuProperties": {"1": "1","2": "3"},"specs1": "1","specsValue1": "1","specs2": "2","specsValue2": "3","skuPropertiesName": null,"specs": [{"valueName": "十宗罪1","name": "系列"},{"valueName": "不恐怖","name": "版本"}]}

首先,要知道一个概念,就是mybatis-plus执行SQL查询的过程

  1. 构建SQL语句:编写SQL语句,在xml中或使用注解定义SQL。参数占位符:使用#{}或 ${}来插入动态参数
  2. 参数绑定:在执行SQL查询之前,使用TypeHandler将Java类型转换成JDBC类型。例如String -> varchar, Date -> TIMESTAMP
  3. 预编译SQL:使用PreparedStatement预编译SQL语句,将参数替换成占位符。
  4. 执行SQL:执行预编译后的SQL语句,从 数据库中获取结果集
  5. 结构映射:
    1. mybatis:通过ResultMap配置,将数据库结果集中的列值映射到Java对象的属性上
    2. 结果映射中同样会使用TypeHandler来处理从数据库类型到Java类型的转换
    3. 如果结果 集中的列是一个JSON字符串,而你想映射到一个com.alibaba.fastjson.JSONObject对象,这时可以使用自定义的TypeHandler(FastjsonTypeHandler 针对JSON字段使用)来进行转换
  6. 构建对象:根据映射配置,mybatis会遍历结果集,并为每一行数据创建一个Java对象实例,将结果集中对应的列填充到对象的属性中。

知道这个概念之后,只要利用typeHandler来指定javaType类型为JSONObject或JSONArray就可以实现映射了!!

附加功能: Mybatis 一对多映射

SQL结果集

3	系列	十宗罪1	6	第一部	  1	测试地址
3	系列	十宗罪2	7	第二部	  1 测试地址
4	版本	恐怖	     8	 真恐怖   1 测试地址
4	版本	不恐怖	    9	真不恐怖  1	测试地址

最终结果:

 "data": [{"id": "3","name": "系列","values": [{"id": "6","name": "十宗罪1","picture": "测试地址","available": "1","desc": "第一部"},{"id": "7","name": "十宗罪2","picture": "测试地址","available": "1","desc": "第二部"}]},{"id": "4","name": "版本","values": [{"id": "8","name": "恐怖","picture": "测试地址","available": "1","desc": "真恐怖"},{"id": "9","name": "不恐怖","picture": "测试地址","available": "1","desc": "真不恐怖"}]}]

resultMap实现一对多

<!--    查询规格 属性值 --><select id="getSpecsList" resultMap="specsList">SELECTt4.id  as id,t4.`name` as name,t3.`name` as nameValue,t3.id as idValue,t3.`desc` as `desc`,t3.available as available,t3.picture as pictureFROMbook_specs_value t2JOIN t_specs_value t3 ON t2.specs_value_id = t3.idJOIN t_specs t4 ON t2.specs_id = t4.idWHEREt2.book_id = #{bookId}</select><!-- 一对多 --><resultMap id="specsList" type="org.dromara.app.appojo.aojo.details.Specs"><id property="id" column="id"></id><result property="name" column="name"></result><collection property="values" ofType="org.dromara.app.appojo.aojo.details.SpecsValue"><id column="idValue" property="id" ></id><result column="nameValue" property="name"></result><result column="desc" property="desc"></result><result column="picture" property="picture"></result><result column="available" property="available"></result></collection></resultMap>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/708869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UV-K5

该方法是安装到python的安装目录了&#xff0c;建立项目的时候勾选 Inherit globel site-packages (使用全局的站点包) &#xff0c;就能调用安装路径的包文件环境。 cmd进入Dos窗口安装 pyserial 模块&#xff1a; pip install pyserial

阿里巴巴中国站获得公司档案信息 API 返回值说明

一、应用场景 阿里巴巴中国站获得公司档案信息 API接口的应用场景可以包括但不限于以下几种情况&#xff1a; 1、企业信息查询&#xff1a;API接口可用于查询企业的基本档案信息&#xff0c;如企业名称、注册地址、法定代表人、经营范围等。这些信息对于了解企业背景、信用状…

手机和windows的便签怎么共享账号使用

在忙碌的生活中&#xff0c;我经常需要在手机和电脑之间同步记事信息。可是&#xff0c;每次当我在手机上记下一些重要事项后&#xff0c;想要在电脑上查看或继续编辑时&#xff0c;总是遇到各种麻烦。因为手机和电脑上的便签软件各不相同&#xff0c;无法实现账号共享和内容同…

从0到1实现五子棋游戏!!

Hello&#xff0c;好久不见宝子们&#xff0c;今天来给大家更一个五子棋的程序~ 我们今天要讲的内容如下&#xff1a; 文章目录 1.五子棋游戏介绍1.1 游戏玩法介绍&#xff1a; 2.准备工作2.1 具体操作流程 3.游戏程序主函数4.初始化棋盘4.1.定义宏变量4.2 初始化棋盘 5.打印…

2024年2月最新微信域名检测拦截接口源码

这段PHP代码用于检测指定域名列表中的域名是否被封。代码首先定义了一个包含待检测域名的数组 $domainList&#xff0c;然后遍历该数组&#xff0c;对每个域名发送HTTP请求并检查响应内容以判断域名是否被封。 具体步骤如下&#xff1a; 1. 定义待检测的域名列表。 2. 遍历域名…

一、深度学习介绍

目录 1、深度学习与机器学习的区别 1.1 特征提取方面 1.2 数据量和计算性能要求 1.3 算法代表 2、深度学习应用场景 1、深度学习与机器学习的区别 1.1 特征提取方面 1.2 数据量和计算性能要求 1.3 算法代表 2、深度学习应用场景

优化全球应用交付,详解GLSB是什么?

伴随着互联网的快速发展&#xff0c;网站的流量请求甚至能达到上千亿&#xff0c;越来越多的用户不满足于在单一数据中心提供服务&#xff0c;开始考虑容灾、用户就近访问以及全球应用交付等问题。在这样的需求下&#xff0c;全局服务器负载均衡技术&#xff08;GSLB&#xff0…

Python电能质量扰动信号分类(六)基于扰动信号特征提取的超强机器学习识别模型

目录 往期精彩内容&#xff1a; 前言 1 数据集和特征提取 1.1 数据集导入 1.2 扰动信号特征提取 2超强模型XGBoost——原理介绍 2.1 原理介绍 2.2 特征数据集制作 3 模型评估和对比 3.1 随机森林分类模型 3.2 支持向量机SVM分类模型 3.3 XGBoost分类模型 代码、数据…

智慧应急与物联网相结合:物联网技术如何提升智慧应急响应能力

目录 一、引言 二、智慧应急与物联网技术的结合 三、物联网技术提升智慧应急响应能力的途径 四、物联网技术在智慧应急中的应用案例 五、物联网技术在智慧应急中面临的挑战与解决方案 挑战一&#xff1a;技术标准与规范不统一 解决方案&#xff1a; 挑战二&#xff1a;…

工业锅炉物联网:HiWoo Cloud为工业能源转型注入新动力

随着全球工业化的快速发展&#xff0c;工业锅炉作为工业生产的“心脏”&#xff0c;其能源效率和运行安全性越来越受到关注。然而&#xff0c;传统的工业锅炉管理往往依赖于人工监控和定期维护&#xff0c;这种方式不仅效率低下&#xff0c;而且难以确保设备的持续高效运行。在…

Matlab如何批量读取txt数据?科研效率UpUp第1期

最近帮几个亲朋好友整理博士毕业论文。 期间&#xff0c;我观察了他们的行为模式&#xff0c;发现其将大量的时间&#xff0c;不同程度地浪费在一些机械、重复性劳动上&#xff0c;导致效率低下。 博士尚且如此&#xff0c;想必还有很多人也深受其扰。 作为一个专业摸鱼人&a…

分享:大数据信用报告查询的价格一般要多少钱?

现在很多人都开始了解自己的大数据信用了&#xff0c;纷纷去查大数据信用报告&#xff0c;由于大数据信用与人行征信有本质的区别&#xff0c;查询方式和价格都不是固定的&#xff0c;本文就为大家详细讲讲大数据信用报告查询的价格一般要多少钱&#xff0c;希望对你有帮助。 大…

vue3 实现一个简单的输入框

需求背景 需要一个输入框&#xff0c;可以输入文字&#xff0c;添加表情&#xff0c;一开始用了富文本编辑器&#xff0c;有点大材小用&#xff0c;所以自己封装一个输入框组件。支持输入文字&#xff0c;选择表情/插入表情&#xff0c;支持组合键换行&#xff0c;使用enter 进…

DPU:未来计算的三大支柱之一

随着计算领域的不断发展&#xff0c;数据处理单元&#xff08;DPU&#xff09;的出现正在重塑数据中心和计算架构的未来。在本文中&#xff0c;我们深入探讨了DPU在该领域的重要性和作用&#xff0c;并将其与传统的中央处理器&#xff08;CPU&#xff09;和图形处理单元&#x…

2024年小程序云开发CMS内容管理无法使用,无法同步内容模型到云开发数据库的解决方案,回退老版本CMS内容管理的最新方法

一&#xff0c;问题描述 最近越来越多的同学找石头哥&#xff0c;说cms用不了&#xff0c;其实是小程序官方最近又搞大动作了&#xff0c;偷偷的升级的云开发cms&#xff08;内容管理&#xff09;以下都称cms&#xff0c;不升级不要紧&#xff0c;这一升级&#xff0c;就导致我…

亚马逊云科技实时 AI 编程助手 Amazon CodeWhisperer,开发快人一步

​ 亚马逊云科技&#xff1a;https://mic.anruicloud.com/url/1024 ​ Amazon CodeWhisperer 是一款 AI 编码配套应用程序&#xff0c;可在 IDE 中生成 整行代码和完整的函数代码建议&#xff0c;以帮助您更快地完成更多工作。在本系列 文章中&#xff0c;我们将为您详细介绍 A…

学习阶段单片机买esp32还是stm32?

学习阶段单片机买esp32还是stm32? 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「stm32的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xf…

5G时代对于工业化场景应用有什么改善

5G 不仅仅是 4G 的技术升级&#xff0c;而是将平板电脑和智能手机的技术升级。除了更好的高清视频流和其他高带宽应用&#xff0c;消费者不会注意到很多性能差异。然而&#xff0c;在工业领域&#xff0c;5G 代表着巨大的飞跃。 在工厂和厂房内&#xff0c; 设备的Wi-Fi 网络经…

el-table实现转置表格

vue版本&#xff1a;vue2.6.10 elementui版本&#xff1a;2.15.14 实现效果&#xff1a;el-table实现行列互换 代码&#xff1a; <template><div class"app-container"><span>原始数据</span><el-table:data"datas"border>…

自动化信息抽取:提升物资仓库管理效率的实践案例

一、引言 在当今快节奏的供应链管理中&#xff0c;物资仓库的信息抽取和处理是确保物流效率的关键环节。我曾参与的一个项目&#xff0c;正是针对这一需求而设计。该项目的核心目标是优化收货与入库流程&#xff0c;通过先进的信息抽取技术&#xff0c;我们能够自动接收并处理来…