MyBatis-Plus条件构造器和常用接口
一、warpper条件构造器关系介绍

Wrapper : 条件构造抽象类,是最上层的父类
- AbstractWrapper : 作用是进行查询条件封装,生成 sql 的 where 筛选条件
- QueryWrapper : Entity(枚举) 对象封装操作类,不是用lambda语法
- UpdateWrapper : Update 条件封装,用于Entity对象更新操作
- AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
-
- LambdaQueryWrapper : 用于Lambda语法使用的查询Wrapper
- LambdaUpdateWrapper : Lambda 更新封装的Wrapper
二、常见方法说明
具体用法参考:https://baomidou.com/pages/10c804/
2.1.QueryWrapper
组装查询条件
//组装查询条件 @Test public void testQueryWrapper01(){ //查询用户名包含 王,年龄介于25到40岁直接,邮箱不为空的用户信息 QueryWrapper<User> userQueryWrapper = new QueryWrapper<>(); /** * 设置查询条件 * 执行的SQL * SELECT uid AS id,user_name AS name,age,email,is_delete FROM t_user WHERE is_delete=0 AND (user_name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL) * * */ userQueryWrapper.like("user_name", "王") .between("age", 25, 40) .isNotNull("email"); List<User> users = userMapper.selectList(userQueryWrapper); users.forEach(System.out::println); }
组装排序条件
//排序条件查询 @Test public void testQueryWrapper02(){ //按照年龄降序查询用户信息,年龄相同则按照id升序排列 QueryWrapper<User> userQueryWrapper = new QueryWrapper<>(); //设置查询条件 userQueryWrapper.orderByDesc("age").orderByAsc("uid"); //查询 List<User> users = userMapper.selectList(userQueryWrapper); users.forEach(System.out::println); }
组装删除条件
//组装删除条件 @Test public void testQueryWrapper03(){ //删除email为空的用户 QueryWrapper<User> userQueryWrapper = new QueryWrapper<>(); //设置条件 userQueryWrapper.isNull("email"); //删除 int result = userMapper.delete(userQueryWrapper); System.out.println("受到影响的行数:"+result); }
条件的优先级
//条件优先级 @Test public void testQueryWrapper04(){ //查询 年龄大于25 用户名中包含有 m, 或者邮箱为Null的用户信息 QueryWrapper<User> userQueryWrapper = new QueryWrapper<>(); //设置条件 userQueryWrapper.like("user_name","m") .gt("age",20) .or() .isNull("email"); //设置修改的用户字段信息 // UPDATE t_user SET age=?, email=? WHERE is_delete=0 AND (user_name LIKE ? AND age > ? OR email IS NULL) User user = new User(); user.setAge(10); user.setEmail("hello@163.com"); //设置查询 int result = userMapper.update(user, userQueryWrapper); System.out.println("受影响的行数:"+result); } @Test public void testQueryWrapper05(){ // 把用户名中包含有a 并且 (年龄大于20或者邮箱为null) 的用户信息 QueryWrapper<User> userQueryWrapper = new QueryWrapper<>(); //设置条件 userQueryWrapper.like("user_name","a") .and(i->i.gt("age",20).or().isNull("email")); //设置修改的用户字段信息 // UPDATE t_user SET age=?, email=? WHERE is_delete=0 AND (user_name LIKE ? AND age > ? OR email IS NULL) User user = new User(); user.setAge(10); user.setEmail("hello@163.com"); //设置查询 int result = userMapper.update(user, userQueryWrapper); System.out.println("受影响的行数:"+result); }
组装select子句
//组装select子句 @Test public void testQueryWrapper06(){ //查询用户信息的user_name和age字段 QueryWrapper<User> userQueryWrapper = new QueryWrapper<>(); //设置查询输出的字段 userQueryWrapper.select("user_name","age"); //selectMaps()返回Map集合列表,通常配合select()使用,避免User对象中没有被查询到的列值 为null List<Map<String, Object>> maps = userMapper.selectMaps(userQueryWrapper); maps.forEach(System.out::println); }
实现子查询
//实现子查询 @Test public void testQueryWrapper07(){ //查询年龄小于等于18的用户信息 QueryWrapper<User> userQueryWrapper = new QueryWrapper<>(); //设置子查询 // userQueryWrapper.inSql("uid","select uid from t_user where age<= 18"); userQueryWrapper.inSql("uid","select uid from t_user where age<= 18"); //selectMaps()返回Map集合列表,通常配合select()使用,避免User对象中没有被查询到的列值 为null List<User> users = userMapper.selectList(userQueryWrapper); users.forEach(System.out::println); }
2.2.UpdateWrapper
@Test public void testUpDateWrapper(){ //将 (年龄大于30或者邮箱为null)并且用户名中包含有王 字的用户信息进行修改 UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>(); //组装set子句和修改条件 userUpdateWrapper.set("age",8).set("email","wuji@163.com") .like("user_name","王") .and(i->i.gt("age",25).or().isNull("email")); //执行修改 这里就不需要创建user对象了 int result = userMapper.update(null, userUpdateWrapper); System.out.println("受影响的行数:"+result); }
2.3.condition
在真正开发的过程中,组装条件是常见的功能,而这些条件数据来源于用户输入,是可选的,因此我们在组装这些条件时,必须先判断用户是否选择了这些条件,若选择则需要组装该条件,若没有选择则一定不能组装,以免影响SQL执行的结果
@Test public void testCondition(){ //定义查询条件,有时候页面的字段有可能不输入传输到后端为null,这时候就不用组装该字段 String user_name = null; Integer ageBegin = 25; Integer ageEnd = 40; QueryWrapper<User> userQueryWrapper = new QueryWrapper<>(); //StringUtils.isNotBlank(user_name)判断某个字符串是否不为空并且长度不为0没有空白字符 userQueryWrapper.like(StringUtils.isNotBlank(user_name),"user_name", "王") .ge(ageBegin != null,"age",ageBegin) .le(ageEnd != null,"age",ageEnd); //查询数据 List<User> users = userMapper.selectList(userQueryWrapper); users.forEach(System.out::println); }
2.4.LambdaQueryWrapper
@Test public void testQueryWrapper10(){ //定义查询条件,有时候页面的字段有可能不输入传输到后端为null,这时候就不用组装该字段 String user_name = "莎"; Integer ageBegin = 25; Integer ageEnd = 40; LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>(); //判断如果为空,则不组装 userLambdaQueryWrapper.like(StringUtils.isNotBlank(user_name),User::getName, user_name) .ge(ageBegin != null,User::getAge,ageBegin) .le(ageEnd != null,User::getAge, ageEnd); List<User> users = userMapper.selectList(userLambdaQueryWrapper); users.forEach(System.out::println); }
2.5.LambdaUpdateWrapper
@Test public void testQueryWrapper11(){ //组装set子句 LambdaUpdateWrapper<User> userLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); userLambdaUpdateWrapper.set(User::getAge,37) .set(User::getEmail,"hello@126.com") .like(User::getName,"莎") .and(i->i.gt(User::getAge,35).or().isNull(User::getEmail)); int result = userMapper.update(null, userLambdaUpdateWrapper); System.out.println("受影响的行数:"+result); }

浙公网安备 33010602011771号