在使用MyBatis-Plus开发过程中,不可避免的会出现有些略复杂的查询,需要熟练使用MyBatis-Plus来实现这些功能。
列表搜索页,根据某个字段名称进行查询,后端存储的数据表中是包含了有效数据和无效数据,即查询的时候要在有效数据中查询,且字段名称范围编码和中文名称,就要用或
来查询。
直接写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"));
如此即可,按照预期查询数据。
页面展示,需要先根据某个字段进行筛选,然后对筛选完后的数据的某个字段进行分组,之后再聚合统计每个组有多少条数据,最后再根据条数倒叙,取前五条数据。
直接写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的使用技巧再继续分享…