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类接着写代码即可

    @Test
    //使用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数据即使符合条件也不会被修改到