wrapper条件构造器
仅演示部分方法,全部方法请查阅Mybatis-Plus官网
Wrapper : 条件构造抽象类,最顶端父类
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
QueryWrapper : 查询条件封装
UpdateWrapper : Update 条件封装
AbstractLambdaWrapper : 使用Lambda 语法
LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper : Lambda 更新封装Wrapper
QueryWrapper(不推荐)
数据库的字段名需要自己填写,容易写错,以下为一个示例,后续采用LambdaQueryWrapper演示
eq
- 等于 =
- 例:
eq("name", "老王")
--->name = '老王'
查询数据库字段name,名字为Tom的用户
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "Tom");
User user = userMapper.selectOne(queryWrapper);
System.out.println("user = " + user);
LambdaQueryWrapper(推荐)
eq
- 等于 =
- 例:
eq("name", "老王")
--->name = '老王'
查询数据库字段name,名字为Tom的用户
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getName, "Tom");
User user = userMapper.selectOne(queryWrapper);
System.out.println("user = " + user);
gt
- 大于 >
- 例:
gt("age", 18)
--->age > 18
查询年龄大于20的用户
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.gt(User::getAge, 20);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
ge
- 大于等于 >=
- 例:
ge("age", 18)
--->age >= 18
查询年龄大于等于22的用户
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.ge(User::getAge, 22);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
lt
- 小于 <
- 例:
lt("age", 18)
--->age < 18
查询年龄小于22的用户
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.lt(User::getAge, 22);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
le
- 小于等于 <=
- 例:
le("age", 18)
--->age <= 18
查询年龄小于等于22的用户
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.le(User::getAge, 22);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
between
- BETWEEN 值1 AND 值2
- 例:
between("age", 18, 30)
--->age between 18 and 30
查询年龄在18到30之间的用户
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.between(User::getAge, 18,30);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
like
- LIKE '%值%'
- 例:
like("name", "王")
--->name like '%王%'
查询名字含有“王”字的用户
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(User::getName, "王");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
orderByDesc
- 排序:ORDER BY 字段, ... DESC
- 例:
orderByDesc("age")
--->order by age DESC
按年龄降序排序
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByDesc(User::getAge);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
组合使用
按年龄降序查询用户,如果年龄相同则按id升序排列
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper
.orderByDesc(User::getAge)
.orderByAsc(User::getId);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
查询用户名包含a,年龄在20到30之间,并且邮箱不为null的用户信息
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper
.like(User::getName,"a")
.between(User::getAge,20,30)
.isNull(User::getEmail);
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
UpdateWrapper(不推荐)
set
- 例:
set("name", "老李头")
- 例:
set("name", "")
--->数据库字段值变为空字符串 - 例:
set("name", null)
--->数据库字段值变为null
将(年龄大于20或邮箱为null)并且用户名中包含有a的用户信息修改
提示
复杂sql语句不建议使用条件构造器,推荐使用xml
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper
.set("age", 18)
.set("email", "aaa@123.com")
.like("name", "a")
.and(i -> i
.gt("age", 20)
.or()
.isNull("email")
);
int update = userMapper.update(updateWrapper);
System.out.println("update = " + update);
LambdaUpdateWrapper(推荐)
LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper
.set(User::getAge, 18)
.set(User::getEmail, "aaa@123.com")
.like(User::getName, "a")
.and(i -> i
.gt(User::getAge, 20)
.or()
.isNull(User::getEmail)
);
int update = userMapper.update(updateWrapper);
System.out.println("update = " + update);