Wrapper :条件构造抽象类,最顶端父类。AbstractWrapper类比较重要。
AbstractWrapper类
是 QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类。用于生成 sql 的 where 条件,,entity 属性也用于生成 sql 的 where 条件。
注意:
entity 生成的 where 条件与 使用各个 api 生成的 where 条件没有任何关联行为
AbstractWrapper抽象类提供的重要方法查看官方文档。
官方文档–条件构造器 AbstractWrapper方法:https://baomidou.com/pages/10c804/#abstractwrapper
注意:
对于CRUD操作,我们都可以使用条件构造器Wrapper来操作。
select方法:查询返回指定的部分字段数据。
select(String... sqlSelect)
select(Predicate<TableFieldInfo> predicate)
select(Class<T> entityClass, Predicate<TableFieldInfo> predicate)
QueryWrapper<UserDO> queryWrapper = new QueryWrapper<UserDO>();
queryWrapper
.select("id", "user_name", "height", "create_time");
List<UserDO> userDOList = userService.list(queryWrapper);
QueryWrapper<UserDO> queryWrapper = new QueryWrapper<UserDO>();
queryWrapper
.lambda()
.select(UserDO::getId, UserDO::getUserName, UserDO::getHeight, UserDO::getCreateTime);
List<UserDO> userDOList = userService.list(queryWrapper);
eq(R column, Object val)
eq(boolean condition, R column, Object val)
注意:boolean condition 是控制该字段是否拼接到最终的sql语句中。如果为 true时,才会生成 sql 的 where 条件。
QueryWrapper<UserDO> queryWrapper = new QueryWrapper<UserDO>();
queryWrapper
.select("id", "user_name", "height", "create_time")
.eq("user_name", "赵子龙");
List<UserDO> userDOList = userService.list(queryWrapper);
QueryWrapper<UserDO> queryWrapper = new QueryWrapper<UserDO>();
queryWrapper
.lambda()
.select(UserDO::getId, UserDO::getUserName, UserDO::getHeight, UserDO::getCreateTime)
.eq(false,UserDO::getUserName, "赵子龙"); //不会生成 sql 的 where 条件
List<UserDO> userDOList = userService.list(queryWrapper);
通过上面的使用,对 QueryWrapper和 LambdaQueryWrapper的使用有些认知吧,后面更多使用,自行了解。
@Test
public void testPageWrapper() {
System.out.println(("----- 分页查询 method test ------"));
QueryWrapper<UserDO> queryWrapper = new QueryWrapper<UserDO>();
queryWrapper
.lambda()
.select(UserDO::getId, UserDO::getUserName, UserDO::getHeight, UserDO::getCreateTime)
.eq(false,UserDO::getUserName, "赵子龙") //不会生成 sql 的 where 条件
.or()
.le(UserDO::getAge, 20);
Page<UserDO> page = new Page<>(2, 4);
Page<UserDO> userPage = userService.page(page, queryWrapper);
System.out.println("当前页:" + userPage.getCurrent());
System.out.println("总页数:" + userPage.getPages());
System.out.println("记录数:" + userPage.getTotal());
System.out.println("是否有上一页:" + userPage.hasPrevious());
System.out.println("是否有下一页:" + userPage.hasNext());
System.out.println("所有记录数据如下:");
userPage.getRecords().forEach(System.out::println);
}
set(String column, Object val)
set(boolean condition, String column, Object val)
setSql(String sql)
UpdateWrapper<UserDO> updateWrapper = new UpdateWrapper<UserDO>();
updateWrapper
.set("user_name","赵子龙updateWrapper")
.set("age","22")
.setSql("height = '1.80'")
.eq("id", "7");
boolean update = userService.update(updateWrapper);
UpdateWrapper<UserDO> updateWrapper = new UpdateWrapper<UserDO>();
updateWrapper
.lambda()
.set(UserDO::getUserName, "赵子龙LambdaUpdateWrapper")
.set(UserDO::getAge, 21)
.setSql("height = '1.80'")
.eq(true,UserDO::getId, 7);
boolean update = userService.update(updateWrapper);
default boolean update(Wrapper<T> updateWrapper) {
return this.update((Object)null, updateWrapper);
}
default boolean update(T entity, Wrapper<T> updateWrapper) {
return SqlHelper.retBool(this.getBaseMapper().update(entity, updateWrapper));
}
使用 T entity主要就是先在UpdateWrapper中设置查询条件,再通过实体类去设置要修改的值,也就是sql语句中的set内容,这种是比较符合mybatis plus的语句。
注意:
这里以 LambdaUpdateWrapper为例。
@Test
public void testLambdaUpdateWrapper2() {
System.out.println(("----- LambdaUpdateWrapper修改(使用 entity) method test ------"));
// 需要修改的字段
UserDO userDO = new UserDO();
userDO.setUserName("赵子龙LambdaUpdateWrapper");
userDO.setAge(20);
userDO.setHeight(1.88);
userDO.setEmail("zhaoyun@123.com");
userDO.setUpdateTime(new Date());
UpdateWrapper<UserDO> updateWrapper = new UpdateWrapper<UserDO>();
updateWrapper
.lambda()
.eq(UserDO::getUserName, "赵子龙")
.or()
.eq(true,UserDO::getId, 7);
boolean update = userService.update(userDO, updateWrapper);
System.out.println("update = " + update);
}
通过上面的使用,对 UpdateWrapper和 LambdaUpdateWrapper,以及 update方法的使用有些认知吧,后面更多使用,自行了解。
– 求知若饥,虚心若愚。