当前位置:   article > 正文

springboot 如何操作 mysql json类型 读取和存储 实例_spring mysql json

spring mysql json

这里说下我使用mybatis 应该没有人不知道这个东西了吧?

首先 json这个类型 在mysql 里是5.7才支持的 5.7以下不支持

有这么一张表

2024-06-22T04:14:13.png

  • 简单的不能在简单了

sql 操作

// 注意 数组需要加上''
INSERT INTO `sys_check` (id, assign_id ) VALUES (1, '[11111]' );
  • 1
  • 2
  • 查询
SELECT
	* 
FROM
	`sys_check`
WHERE
	JSON_CONTAINS(assign_id ,'"11111"', '$')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 第一个参数是查询的JSON对象, 第二个参数是需要查找的JSON对象(在这里是包含一个字符串"2"的JSON数组), 第三个参数是$(表示查询应该从整个JSON对象开始)

可能会问 ‘“11111”’ 怎么这么多字符串 ‘" "’

  • 例如, 如果想搜索数字11111, 在JSON格式中, 需要写成'11111'而不是原始数字 11111
  • 再比如 如果想搜索字符串 "11111" 在JSON格式中, 需要写成’“11111”'而不是原始数字 "11111"

总结: 在json格式中 都必须加上 `''`符号


接下来 上springboot 贴上我的实体类

@TableName(value ="sys_check", autoResultMap = true)
@Data
public class Check implements Serializable {

    @TableField(value = "id")
    private Long id;


    @TableField(value = "assign_id", typeHandler = JacksonTypeHandler.class)
    private List<String> assignIdList;


}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

解释下比较关键的几个点

  • 必须声明 autoResultMap = true
  • 必须实现 Serializable接口
  • 和 必须加入json解析 typeHandler = JacksonTypeHandler.class

其中 JacksonTypeHandler这个json解析器需要和mapper.xml对应

2024-06-22T04:17:27.png

顺便说下 这个json解析器

@TableField(typeHandler = JacksonTypeHandler.class)

 
@TableField(typeHandler = FastjsonTypeHandler.class)

  • 1
  • 2
  • 3
  • 4
  • 5

JacksonTypeHandler

  • 支持 MVC JSON 解析
  • 支持 MySQL JSON 解析

传统的方法是通过 XML SQL 的 resultMap 来做 typeHandler 映射处理,但是这样会影响 MP 的功能,所以 JacksonTypeHandler 正好可以兼容 MP 的功能和满足 支持 MySQL JSON 解析。

FastjsonTypeHandler

  • 支持 MVC JSON 解析
  • 不支持 MySQL JSON 解析

注意: 可以通过 XML 支持,只是会失去 mybatis 特性

<resultMap id="xxxx" type="xxxx" >
	<result column="api_dataway" property="apiDataway" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler" />
</resultMap>
  • 1
  • 2
  • 3

注意事项:

MVC JSON 解析时,可以不用加 @TableName(value = “tableName”, autoResultMap = true) 【高亮部分】,
但是 MySQL JSON 解析查询的时候,如果不加,查出来会为 null

MySQL JSON 解析查询时,只支持JSON格式:{“name”:“Tom”,“age”:12},

不支持:{“name”:“Tom”,“age”:12} 和 “{“name”:“Tom”,“age”:12}”

实践例子 :

  • 比如 我需要查询数据库 json 数组中是否包含某个值的数据
    废话不多少 直接上图
    2024-06-22T12:26:11.png
    2024-06-22T12:26:48.png
    2024-06-22T12:25:54.png
    <select id="findByIdCheck" parameterType="String" resultMap="BaseResultMap">
        select id, assign_id  FROM sys_check where JSON_CONTAINS(assign_id, CONCAT('"',#{assignId}, '"'), '$');
    </select>
  • 1
  • 2
  • 3

注意 参数 assignId 前需要 拼接上 '
所以使用 sql 函数 CONCAT

再次说明下 在json格式中 都必须加上 `''`符号


最后 贴上我的个人博客

Likefr-Blog

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/988957
推荐阅读
相关标签
  

闽ICP备14008679号