基于MyBatis-Plus实现复杂查询
2024-01-02 19:41:42
在使用MyBatis-Plus开发过程中,不可避免的会出现有些略复杂的查询,需要熟练使用MyBatis-Plus来实现这些功能。
使用and、or
需求背景
列表搜索页,根据某个字段名称进行查询,后端存储的数据表中是包含了有效数据和无效数据,即查询的时候要在有效数据中查询,且字段名称范围编码和中文名称,就要用或
来查询。
直接写SQL就是这么写
select * from test from data_status = 0 and (name='测试' or code='CS')
然后使用MyBatis-Plus来写的话,要避免以下这种写法
QueryWrapper<TestEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("data_status",1)
.like("name","测试")
.or()
.like("name","CS");
上述写法的SQL语句是
select * from test from data_status = 0 and name='测试' or code='CS'
这样就是错的了,跟预期不符,需要注意
正确的写法应该是!
正确的写法应该是!
正确的写法应该是!
QueryWrapper<TestEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("data_status",1);
queryWrapper.and(wrapper ->
wrapper.like("name","测试")
.or()
.like("name","CS"));
如此即可,按照预期查询数据。
分组,聚合统计,排序,取前5
需求背景
页面展示,需要先根据某个字段进行筛选,然后对筛选完后的数据的某个字段进行分组,之后再聚合统计每个组有多少条数据,最后再根据条数倒叙,取前五条数据。
直接写SQL就是这么写
select name,count(id) as num from test where name like '测试%' group by name order by count(id) desc limit 5
使用MyBatis-Plus写法如下
QueryWrapper<TestEntity> queryWrapper = new QueryWrapper<>();
queryWrapper
.select("name","count(id) as num")
.likeRight("name","测试")
.groupBy("name")
.orderByDesc("count(id)").last("limit 5");
需要注意的是num
这个字段是数据表里没有的字段,但是TestEntity这个类中是需要输出的,所以也需要配置一下
@TableField(exist = false)
private Integer num;
上述配置就是标记该字段在数据表中没有映射的。
未完待续,后续如果有新的需求开发用到了更多MyBatis-Plus的使用技巧再继续分享…
文章来源:https://blog.csdn.net/flash_love/article/details/135344432
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!