MySQL 中JSON_CONTAINS ,用于检查 JSON 文档是否包含特定的值

JSON_CONTAINS 是 MySQL 中的一个函数,用于检查 JSON 文档是否包含特定的值。下面是一些使用 JSON_CONTAINS 的 SQL 示例:

基本用法

SELECT * FROM your_table 
WHERE JSON_CONTAINS(json_column, '"value"', '$.path');

其中:

  • json_column 是包含 JSON 数据的列
  • '"value"' 是要搜索的值(注意需要用双引号包裹,然后外面再用单引号)
  • '$.path' 是可选的 JSON 路径参数

在我的方法中

假设表中有一列 department_ids 存储了部门 ID 的 JSON 数组,例如 ["2", "6", "7", "8", "1"],你想查询是否包含特定部门 ID(例如 "6"),SQL 可以这样写:
 

SELECT * FROM your_table 
WHERE JSON_CONTAINS(department_ids, '"6"');

使用变量

如果你要在 MyBatis 或 MyBatisPlus 中使用参数:

SELECT * FROM your_table 
WHERE JSON_CONTAINS(department_ids, #{deptId});

在mybatisplus中使用

User userInfo = UserHolder.getUserInfo();
        QueryWrapper queryWrapper = new QueryWrapper<>();
        if (StrUtil.isNotBlank(keywords)) queryWrapper.like("name", keywords);
      
            //查看是否在自己所在的部门
        queryWrapper.apply("JSON_CONTAINS(allow_dept_ids, {0})", "\"" + userInfo.getDeptId() + "\"");
            queryWrapper.eq("is_share", true);
       
        queryWrapper.orderByDesc("id");
        Page pager = this.page(new Page<>(page, pageSize), queryWrapper);
        return Result.success(Pager.from(pager));

打印出来的sql

SELECT
  id,
  NAME,
  allow_dept_ids,
  file_count,
  is_share,
  is_deleted,
  create_time,
  update_time,
  create_by,
  update_by 
FROM
  ct_kb 
WHERE
  is_deleted = 0 
  AND ( JSON_CONTAINS( allow_dept_ids, '"1"' ) AND is_share = TRUE ) 
ORDER BY
  id DESC

你可能感兴趣的:(json)