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<Kb> 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<Kb> 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