ToB企服应用市场:ToB评测及商务社交产业平台

标题: 数据库JSON范例到映射JAVA上 [打印本页]

作者: 王柳    时间: 2024-7-12 19:35
标题: 数据库JSON范例到映射JAVA上
Mysql存放JSON数据如何映射JAVA实体类

概述:最近写在写SKU模块中,必要表中字段存放JSON范例数据,mybatis-plus在查询的时候如何跟JSON范例所匹配呢?再次记录一下。
直接上代码,后面有解释到底如何映射上的。
Mysql表数据

JAVA实体类
  1. @Data
  2. public class TSku {
  3.     private Long id;
  4.     private Long bookId;
  5.     private Long inventory;
  6.     private BigDecimal oldPrice;
  7.     private String picture;
  8.     private BigDecimal price;
  9.     private String skuCode;
  10.     // 自定义类型处理器,表示java类型与数据库类型双向转换
  11.     @TableField(typeHandler = FastjsonTypeHandler.class)
  12.     private JSONObject skuProperties;
  13.     private String specs1;
  14.     private String specsValue1;
  15.     private String specs2;
  16.     private String specsValue2;
  17.     // 自定义类型处理器,表示java类型与数据库类型双向转换
  18.     @TableField(typeHandler = FastjsonTypeHandler.class)
  19.     private JSONArray skuPropertiesName;
  20.     @TableField(exist = false)
  21.     private List<SkusSpec> specs;
  22. }
复制代码
XML查询SQL
  1. <select id="getTSkuList" resultMap="skuList">
  2.         select * from t_sku
  3.         where book_id = #{bookId}
  4.     </select>
  5.     <resultMap id="skuList" type="org.dromara.library.domain.TSku">
  6.         <!-- 转换JSONObject-->
  7.         <result column="sku_properties"
  8.                 property="skuProperties"
  9.         jdbcType="OTHER" javaType="com.alibaba.fastjson.JSONObject"
  10.         typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler" />
  11.         <!-- 转换JSONArray-->
  12.         <result column="sku_properties_name"
  13.                 property="specs"
  14.                 jdbcType="OTHER" javaType="com.alibaba.fastjson.JSONArray"
  15.                 typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler" />
  16.     </resultMap>
复制代码
属性名称作用column数据库表中列名propertyJava实体类中的属性名jdbcType数据库字段的JDBC范例,这里是OTHER表示字段的范例不是JDBC标准范例javaType映射到Java实体类属性范例typeHandler自界说范例处置惩罚器,主要负责Java范例和JDBC范例之间举行转换 java返回效果展示
  1. "code": 200,
  2.     "msg": "操作成功",
  3.     "data": [
  4.         {
  5.             "id": 1,
  6.             "bookId": 11,
  7.             "inventory": 10,
  8.             "oldPrice": "100.00",
  9.             "picture": "http://xx.xx.xxx.xx:xx/ttbook/2024/02/28/bc4d02cc21974b85aceb9c4aa55b8b66.jpg",
  10.             "price": "49.00",
  11.             "skuCode": "TT001",
  12.             "skuProperties": {
  13.                 "1": "1",
  14.                 "2": "3"
  15.             },
  16.             "specs1": "1",
  17.             "specsValue1": "1",
  18.             "specs2": "2",
  19.             "specsValue2": "3",
  20.             "skuPropertiesName": null,
  21.             "specs": [
  22.                 {
  23.                     "valueName": "十宗罪1",
  24.                     "name": "系列"
  25.                 },
  26.                 {
  27.                     "valueName": "不恐怖",
  28.                     "name": "版本"
  29.                 }
  30.             ]
  31.         }
复制代码
起首,要知道一个概念,就是mybatis-plus实行SQL查询的过程
知道这个概念之后,只要利用typeHandler来指定javaType范例为JSONObject或JSONArray就可以实现映射了!!
附加功能: Mybatis 一对多映射
SQL效果集
  1. 3        系列        十宗罪1        6        第一部          1        测试地址
  2. 3        系列        十宗罪2        7        第二部          1 测试地址
  3. 4        版本        恐怖             8         真恐怖   1 测试地址
  4. 4        版本        不恐怖            9        真不恐怖  1        测试地址
复制代码
最终效果:
  1. "data": [
  2.         {
  3.             "id": "3",
  4.             "name": "系列",
  5.             "values": [
  6.                 {
  7.                     "id": "6",
  8.                     "name": "十宗罪1",
  9.                     "picture": "测试地址",
  10.                     "available": "1",
  11.                     "desc": "第一部"
  12.                 },
  13.                 {
  14.                     "id": "7",
  15.                     "name": "十宗罪2",
  16.                     "picture": "测试地址",
  17.                     "available": "1",
  18.                     "desc": "第二部"
  19.                 }
  20.             ]
  21.         },
  22.         {
  23.             "id": "4",
  24.             "name": "版本",
  25.             "values": [
  26.                 {
  27.                     "id": "8",
  28.                     "name": "恐怖",
  29.                     "picture": "测试地址",
  30.                     "available": "1",
  31.                     "desc": "真恐怖"
  32.                 },
  33.                 {
  34.                     "id": "9",
  35.                     "name": "不恐怖",
  36.                     "picture": "测试地址",
  37.                     "available": "1",
  38.                     "desc": "真不恐怖"
  39.                 }
  40.             ]
  41.         }
  42.     ]
复制代码
resultMap实现一对多
  1. <!--    查询规格 属性值 -->
  2.     <select id="getSpecsList" resultMap="specsList">
  3.         SELECT
  4.             t4.id  as id,
  5.             t4.`name` as name,
  6.             t3.`name` as nameValue,
  7.             t3.id as idValue,
  8.             t3.`desc` as `desc`,
  9.             t3.available as available,
  10.             t3.picture as picture
  11.         FROM
  12.             book_specs_value t2
  13.                 JOIN t_specs_value t3 ON t2.specs_value_id = t3.id
  14.                 JOIN t_specs t4 ON t2.specs_id = t4.id
  15.         WHERE
  16.             t2.book_id = #{bookId}
  17.     </select>
  18.     <!-- 一对多 -->
  19.     <resultMap id="specsList" type="org.dromara.app.appojo.aojo.details.Specs">
  20.         <id property="id" column="id"></id>
  21.         <result property="name" column="name"></result>
  22.         <collection property="values" ofType="org.dromara.app.appojo.aojo.details.SpecsValue">
  23.             <id column="idValue" property="id" ></id>
  24.             <result column="nameValue" property="name"></result>
  25.             <result column="desc" property="desc"></result>
  26.             <result column="picture" property="picture"></result>
  27.             <result column="available" property="available"></result>
  28.         </collection>
  29.     </resultMap>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4