条件构造器的用法:
- QueryWrapper和LambdaQueryWrapper通常用来构建select、delect、update的where条件部分;
- UpdateWrapper和LambadaUpdateWrapper通常只有在set语句使用比较特殊才使用
- 尽量使用LambdaQueryWrapper和LambdaUpdateWrapper,避免硬编码
//查询包含o字母,且薪水大于800的员工
@Test
void testQueryWrapper(){
//1.构建查询条件
QueryWrapper<User> wrapper = new QueryWrapper<User>()
.select("id","username","info","balance")
.like("username", "o")
.ge("balance", 800);
//2.查询
List<User> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);
}
//更新Jack的薪水为2000
@Test
void testUpdateQueryWrapper(){
//1.构建更新条件
User user = new User();
user.setBalance(2000);
QueryWrapper<User> wrapper = new QueryWrapper<User>()
.eq("username", "jack");
userMapper.update(user, wrapper);
}
//扣除 id为 1 2 4 的薪水 各减200
@Test
void testUpdateWrapper(){
//创建一个集合
List<Long> ids = List.of(1L,3L,4L);
UpdateWrapper<User> updateWrapper = new UpdateWrapper<User>()
.setSql("balance = balance - 200")
.in("id", ids);
userMapper.update(null, updateWrapper);
}
}
执行后:
其中使用LambdaQueryWrapper避免硬编码:
原始代码:
//查询包含o字母,且薪水大于800的员工
@Test
void testQueryWrapper(){
//1.构建查询条件
QueryWrapper<User> wrapper = new QueryWrapper<User>()
.select("id","username","info","balance")
.like("username", "o")
.ge("balance", 800);
//2.查询
List<User> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);
}
改进代码:
//查询包含o字母,且薪水大于800的员工
@Test
void testLambdaQueryWrapper(){
//1.构建查询条件
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
.select(User::getId,User::getUsername,User::getInfo,User::getBalance)
.like(User::getUsername, "o")
.ge(User::getBalance, 800);
//2.查询
List<User> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);
}