x
//【条件构造器Wrapper -- 简介】
/*
为了清晰表示父类子类,我们用阶梯的形式写出来,如下
Wrapper: 条件构造抽象类,最顶端父类
AbstractWrapper: 用于查询条件封装。该类是抽象类,有三个子类
QueryWrapper: 封装查询的条件。除了查询还用于删除
UpdateWrapper: 封装修改的条件,还可以封装修改的字段
AbstractLambdaWrapper: 该类是抽象类,可以使用Lambda语法。该类是抽象类,有两个子类
LambdaQueryWrapper: 使用Lambda语法来封装查询的条件。。除了查询还用于删除
LambdaUpdateWrapper: 使用Lambda语法来封装修改的条件
注意: 无论是查询,删除、修改,都可使用QueryWrapper类,原因:UpdateWrapper、QueryWrapper、AbstractLambdaWrapper的父类是同一个
注意: 下面叙述中的逻辑字段,如何判断逻辑字段对应的数据是否被删除。只需要看该逻辑字段的值即可,如果是0的话(我们创建逻辑字段时要求手动赋值为0)就表示未删除,如果是1就表示已经被逻辑删除
*/
//下面我们会讲Wrapper的其中一个子类,也就是UpdateWrapper
----------------------------------------------
//【条件构造器Wrapper -- UpdateWrapper类的修改功能】
//在上节课a_7_1的MyBatisPlusWrapperTest类接着写代码即可
//使用UpdateWrapper类的set方法实现修改功能
public void zidingyi_test8(){
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
//需求: 将用户名中包含a并且(年龄大于20或邮箱为null)的用户信息修改。注意上面演示过一次,当时用的是QueryWrapper类
//难点: 需要优先判断括号里的'年龄大于20或邮箱为null'条件
updateWrapper.like("user_name","a")
.and(i->i.gt("age",20).or().isNull("email"));
updateWrapper.set("user_name","我修改你了").set("email","woxiugainile@123.com");//用链式编程修改多个字段数据
int result = userMapper.update(null, updateWrapper);//由于是修改操作,所以第一个参数可以不提供实体类对象。返回值是受影响的行数
System.out.println("受影响的行数是"+result);
}
//注意如果k条数据里有逻辑字段,并且逻辑字段不为空,并且k数据已经被逻辑删除了,那么此时执行这里的修改方法,k数据即使符合条件也不会被修改到