Mybatis-plus的Wrapper中使用MySQL的json函数

使用Wrapper的apply方法
如下代码,假设UserEntity中有一个roles字段是json数组,我们传入参数中有一个role字段,要筛选出是这个role的用户。
apply的用法如下,先是一个字符串,字符串中类似sl4j记录日志,这里使用{0}占位一个参数,后面的参数放这个占的这个坑中。

        QueryWrapper<UserEntity> queryWrapper = new QueryWrapper<UserEntity>()
                .eq(UserEntity.ID, param.getId())
                .like(UserEntity.NAME, param.getName())
                .apply("JSON_SEARCH({0},'one'," + UserEntity.ROLES + ") is not null", param.getRole());

另外如果你使用JPA,也想使用mysql的JSON相关方法,参考我这篇文章:
JPA的Specification中使用mysql5.7之后的JSON相关函数
mybatis-plus的Wrapper.apply()方法的官方文档:
Mybatis-plus条件构造器#apply

### 使用 MyBatis Plus QueryWrapperMySQL JSON 数据类型进行条件查询 在使用 MyBatis Plus 的 `QueryWrapper` 对 MySQL 中的 JSON 字段执行条件查询时,可以通过 SQL 函数来解析和过滤 JSON 数据。MySQL 提供了多种函数用于处理 JSON 类型的数据,这些功能可以在构建动态 SQL 查询时被充分利用。 对于具体的实现方式,在编写查询语句时可以直接调用 MySQL 内置的 JSON 函数,并通过 `apply()` 方法将其嵌入到 `QueryWrapper` 实例中去[^1]: ```java // 创建 QueryWrapper 并应用自定义 SQL 片段 QueryWrapper<TestJson> queryWrapper = new QueryWrapper<>(); queryWrapper.apply("JSON_UNQUOTE(JSON_EXTRACT({0}, '$.name')) LIKE {1}", "json_obj", "%张三%"); ``` 上述代码片段展示了如何利用 `JSON_EXTRACT` 和 `JSON_UNQUOTE` 函数提取并转换 JSON 路径下的字符串值以便于后续比较操作;其中 `{0}` 表示表中的列名而 `{1}` 则代表参数占位符[^4]。 当涉及到数值类型的检索或是希望进一步优化查询性能的时候,则可考虑采用如下所示的方式引入 CAST 函数来进行类型转换以及可能存在的索引加速: ```java // 当需要对比 JSON 数组内的整数项时 queryWrapper.apply("CAST(JSON_UNQUOTE(JSON_EXTRACT({0}, CONCAT('$.[', {2}, ']'))) AS SIGNED) >= {1}", "json_arr", 18, 0); // 假设要访问第一个元素且其应大于等于18岁 ``` 需要注意的是,尽管可以为 JSON 文档创建虚拟列并通过常规手段建立索引来提升某些场景下读取速度,但对于存储 VARCHAR 类型的内容来说当前版本并不支持直接为此类子集设置索引。 最后提醒一点,确保所使用的数据库环境至少达到 MySQL 5.7 及以上版本才能享受完整的 JSON 支持特性[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值