mybatisplus使⽤进阶之条件构造器以及分页查询使⽤详解中简单的整合了spring boot 与mybatisplus,本篇⽂章主要介绍⼀下mybatisplus中条件构造器以及分页插件的使⽤.
1.条件构造器
QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 和⽗类AbstractWrapper中提供了许多的操作sql的⽅法。mybatisplus提供这些实体包装器,⽤于处理 sql 拼接,排序,实体参数查询等!。
查询⽅式说明
and AND 语句,拼接 + AND 字段=值
or OR 语句,拼接 + OR 字段=值
eq等于=
allEq基于 map 内容等于=
ne不等于<>
gt⼤于>
ge⼤于等于>=
lt⼩于<
le⼩于等于<=
like模糊查询 LIKE
notLike模糊查询 NOT LIKE
in IN 查询
notIn NOT IN 查询
isNull NULL 值查询
isNotNull IS NOT NULL
groupBy分组 GROUP BY
having HAVING 关键词
orderBy排序 ORDER BY
orderAsc ASC 排序 ORDER BY
orderDesc DESC 排序 ORDER BY
exists EXISTS 条件语句
notExists NOT EXISTS 条件语句
between BETWEEN 条件语句
notBetween NOT BETWEEN 条件语句
last拼接在最后,例如:last("LIMIT 1")
1.1 查询相关
下⾯只列举部分⽅法使⽤,其余⽅法都是类似使⽤的
1.1.1 查询单个
@Test
void queryByQueryWrapper(){
// 创建查询wrapper构造器
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 设置条件为id=1 and age is not null
queryWrapper.eq("id",1).isNotNull("age");
User user = userMapper.selectOne(queryWrapper);
LOG.info("user : {}",user);
}
结果如下:
1.1.2 查询多个(queryWrapper构造器和map⽅式⽐较)
上述是使⽤构造器查询单个结果,如果需要查询多个结果则需使⽤其他的⽅法(可以使⽤构造器也可以使⽤map),下⾯是⼀个简单的⽰例:
@Test
void queryList(){
User user = new User();
user.setAge(20);
// 创建查询wrapper构造器
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper = new QueryWrapper<>();
/**
* 条件构造器中这些⽅法中出现的第⼀个⼊参boolean condition表⽰该条件是否加⼊最后⽣成的sql中,不传默认是true
* 该参数可以⽤于校验要使⽤的参数是否付和规范,符合就加⼊到sql中
*/
queryWrapper.Null(user),"age",Age()).isNotNull("age");
// 如果传⼊null则查询所有
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(u ->{
LOG.info("user : {}",u);
});
userList.clear();
// 除了使⽤构造器外还可以使⽤map
LOG.info("===========map============");
// map条件查询,key为列名,value为具体的值
Map<String,Object> map = new HashMap<>();
map.put("age",20);
// 如果传⼊的参数为null则查询所有
userList = userMapper.selectByMap(map);
userList.forEach(u ->{
LOG.info("user : {}",u);
});
}
结果如下:
上述对于等值⽐较使⽤构造器和map获取的结果是⼀致的,他们的区别是:map只能做等值⽐较,如果还需要做其它的条件⽐如⼤于某个值时是没办法处理的⽽构造器就能使⽤⾃⼰的gt()⽅法去操作。
1.1.3  LambdaQueryWrapper使⽤
mybatisplus也⽀持使⽤lambda表达式,相⽐较于QueryWrapper指定列名的时候不是使⽤字符串⽽是使⽤对于字段的get⽅法,列名直接使⽤对象属性名⽆需再写字符串(ps:后续列名改变后,在idea只需使⽤shift+f6改变对象属性名,所有的引⽤改字段的get⽅法之类也会⾃动改变),具体如下使⽤:
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getAge,20).isNotNull(User::getName);
// 如果传⼊null则查询所有
分页查询插件
userList = userMapper.selectList(lambdaQueryWrapper);
userList.forEach(u ->{
LOG.info("user : {}",u);
});
结果如下:
1.2 update相关
@Test
void testUpdate(){
// 创建相应update构造器
UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
// 设置条件将所有年龄为22时将年龄设置成20
userUpdateWrapper.eq("age",22).set("age",20);
// 根据构造器修改符合条件的数据
int count = userMapper.update(new User(),userUpdateWrapper);
LOG.info("count : {}",count);
List<User> userList = userMapper.selectByMap(null);
userList.forEach(u ->{
LOG.info("user : {}",u);
});
LOG.info("=============update by id==========");
/
/ 获取要修改的对象
User user = userMapper.selectById(1);
LOG.info("update before user : {}",user);
user.setName("test");
// 根据传⼊对象的id去修改指定的记录
count = userMapper.updateById(user);
LOG.info("count : {}",count);
user = userMapper.selectById(1);
LOG.info("updateById after user : {}",user);
}
1.3 插⼊记录
@Test
void testInsert(){
User user = new User();
user.setName("test_8");
user.setAge(19);
user.setEmail("test@a");
int count = userMapper.insert(user);
LOG.info("插⼊成功:{}条",count);
}
结果:
1.4 删除相关
@Test
void testDelete(){
// 使⽤条件构造器删除符合条件的,使⽤QueryWrapper和UpdateWrapper都⾏,没有删除相关的wrapper        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
int count = userMapper.delete(queryWrapper.eq("name","test_8"));
LOG.info("删除成功:{}条",count);
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
count = userMapper.delete(updateWrapper.eq("name","Jone_u"));
LOG.info("删除成功:{}条",count);
// 使⽤map删除
Map<String,Object> map = new HashMap<>();
map.put("id",7);
count = userMapper.deleteByMap(map);
LOG.info("删除成功:{}条",count);
// 使⽤id删除
count = userMapper.deleteById(5);
LOG.info("删除成功:{}条",count);
}
2. 分页查询
2.1 配置分页查询所需配置类
@EnableTransactionManagement
@Configuration
@MapperScan("batis_plus.mapper.*mapper*")
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页⾯⼤于最⼤页后操作, true调回到⾸页,false 继续请求默认false
// paginationInterceptor.setOverflow(false);
// 设置最⼤单页限制数量,默认 500 条,-1 不受限制
// paginationInterceptor.setLimit(500);
return paginationInterceptor;
}
}
2.2 使⽤demo
@Test
void testPagination(){
Page<User> page = new Page<>();
// 设置当前是哪⼀页,页数从1开始,传⼊⼩于1的数据都会当作1处理        page.setCurrent(-1);
// 设置每页的数据⼤⼩
page.setSize(2);
IPage<User> userIPage = userMapper.selectPage(page,null);
// 获取数据库中总记录数
LOG.info("total : {}",Total());
/
/ 打印当前页中所有记录
LOG.info("user : {}",user);
});
}
具体结果如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。