2
2.2 实际开发时的应用
在实际开发中,不管是queryWrapper还是updateWrapper都应该在一定的判断下再去使用条件构造器拼接条件,比如说请求传过来的值在不为空的情况下才去对这个字段进行条件设置,比如下面的这段代码
@Test public void ifTest() { String userName = ""; Integer ageBegin = 20; Integer ageEnd = 30; QueryWrapper<User> queryWrapper = new QueryWrapper<>(); if (StringUtils.isNotBlank(userName)) { queryWrapper.like("name", userName); } if (ageBegin != null) { queryWrapper.ge("age", ageBegin); } if (ageEnd != null) { queryWrapper.le("age", ageEnd); } List<User> users = mapper.selectList(queryWrapper); }
然而,上面的代码使用了很多的if判断显得过于冗余,于是许多的方法都带有一个condition参数,当这个参数为true的时候才会拼接查询条件,下面的代码用来代替上面一堆的if判断
QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(userName), "name", userName) .ge(ageBegin != null, "age", ageBegin) .le(ageEnd != null, "age", ageEnd);
3 lambdaXxxWrapper构造器
lambdaXxxWrapper与xxxWrapper的区别就是:他们可以使用Lambda的方式直接调用对象的getter方法来指定字段,而不用对照数据库中的字段名,这样就乐意避免参数对应不上数据库字段的问题。除了在调用字段时的写法不一样之外,其他的写法上二者的方式都一样
3.1 lambdaQueryWrapper构造器
@Test public void lambdaQueryWrapperTest() { String userName = ""; Integer ageBegin = 20; Integer ageEnd = 30; LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.like(StringUtils.isNotBlank(userName), User::getName, userName) .ge(ageBegin != null, User::getAge, ageBegin) .le(ageEnd != null, User::getAge, ageEnd); List<User> users = mapper.selectList(lambdaQueryWrapper); }
3.2 lambdaUpdateWrapper构造器
@Test public void lambdaUpdateWrapperTest() { LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); lambdaUpdateWrapper.like(User::getName, "a") .and(i -> i.gt(User::getAge, 20).or().isNull(User::getEmail)); lambdaUpdateWrapper.set(User::getName, "小黑").set(User::getEmail, "dhsjfghr"); // UPDATE user SET name=?,email=? WHERE is_deleted=0 AND (name LIKE ? AND (age > ? OR email IS NULL)) int result = mapper.update(null, lambdaUpdateWrapper); System.out.println("修改的行数为" + result); }