泰安网站建设哪家强河南网站建设
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
SELECTid,NAME,allow_dept_ids,file_count,is_share,is_deleted,create_time,update_time,create_by,update_by
FROMct_kb
WHEREis_deleted = 0 AND ( JSON_CONTAINS( allow_dept_ids, '"1"' ) AND is_share = TRUE )
ORDER BYid DESC