Mybatis plus 查询mysql json字段的一些方法
By:Roy.LiuLast updated:2025-01-08
最近搞的一个项目,需要用到mybais plus 与mysql Json 字段交互,并且有很多查询的地方。简单记录下,一些常用的方式。
背景:有一个字段需要存储多语言的翻译。所以就在mysql里面定义了一个json字段。里面的内容大概如下:
{"FR": "法语", "en": "English", "zh": "中文"}
在程序里面,需要对这些语言动态修改,扩展,以及查询, 先记录一些常用的查询方式:
用QueryWrap 查询:
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; // 创建QueryWrapper QueryWrapper<User> queryWrapper = new QueryWrapper<>(); // 构建查询条件 queryWrapper.and(wrapper -> wrapper .like("json_data->>'$.FR'", "法语") ); // 执行查询 List<User> users = userService.list(queryWrapper);
2. 用LambdaQueryWrap 查询:
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; // 创建LambdaQueryWrapper LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>(); // 构建查询条件 queryWrapper.apply("JSON_EXTRACT(json_data, '$.FR') LIKE {0}", "%" + "法语" + "%"); // 执行查询 List<User> users = userService.list(queryWrapper);
3. 还可以采用 JSON_SEARCH 来实现:
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; // 创建LambdaQueryWrapper LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>(); // 构建查询条件 queryWrapper.apply("JSON_SEARCH(json_data, 'one', '法语') IS NOT NULL"); // 执行查询 List<User> users = userService.list(queryWrapper);
From:一号门
Previous:java判断文本中是否包含简体中文或者繁体中文的方法
Next: None
COMMENTS