x
    //在上节课a_7_1的MyBatisPlusWrapperTest类接着写代码即可

   //【原始写法】

    @Test
    //模拟开发中的组装条件
    public void zidingyi_test9(){
        //模拟开发: 上面不管是QueryWrapper类还是UpdateWrapper类条件构造器,这俩都是先需要条件,然后如果符合条件,才会执行SQL
        //那往往条件不是我们写的,而是用户在页面选择之后,提交给我们,我们不能让用户提交的任何数据都拼接到SQL里面,所以需要筛一下,避免造成不必要的问题
        //下面就讲如何筛,首先我们需要有成员变量模拟用户提交给我们的数据。例如:用户提交以下数据进行模糊查询,然后判断年龄的区间。那我们就首先筛一下给的数据,如果数据可以,就作为条件去数据库查询
        String zidingyi_username = "";//用户提交的姓名是空字符串
        Integer zidingyi_ageBegin = 20;//用户提交的年龄最小值是20
        Integer zidingyi_ageEnd = 30;//用户提交的年龄最大值是30

        //创建条件构造器,并判断用户给我们的数据满不满足条件,如果满足才会正常的进入条件构造器
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        //判断name
        if(StringUtils.isNotBlank(zidingyi_username)) {//注意StringUtils是MyBatis-Plus包提供的工具类,isNotBlank方法的作用是判断某个字符串是否不为空、不为null、不为空白符
            //如果用户提交的数据满足条件就把用户的数据组装到条件构造器中
            queryWrapper.like("user_name",zidingyi_username);
        }
        //判断age
        if(zidingyi_ageBegin != null){
            queryWrapper.ge("age",zidingyi_ageBegin);//ge表示大于等于,gt表示大于,le表示小于等于,lt表示小于
        }
        if(zidingyi_ageEnd != null){
            queryWrapper.le("age",zidingyi_ageEnd);
        }
        //把赋值好的queryWrapper,放到userMapper里面
        List<User> userList = userMapper.selectList(queryWrapper);
        //由于是List集合,所以我们需要forEach遍历输出
        userList.forEach(System.out::println);
        //发现输出的只有按照年龄进行模糊查询,原因:用户提交的姓名不满足我们的筛选要求,所以无效,不作为查询条件
        //如果用户的姓名不为空,但是年龄最小值用户没有提供,提供了年龄最大值,那么输出的结果就是按照姓名进行模糊查询,且查询的结果年龄都是小于最大值,注意是没有最小值要求
    }

    //注意如果k条数据里有逻辑字段,并且逻辑字段不为空,并且k数据已经被逻辑删除了,那么此时执行这里的查询方法,k数据即使符合条件也不会被查询到


    ----------------------------------------------

   //【优化写法】

    @Test
    //上面那个组装条件还可以优化,例如下面使用condition进行组装条件,优化组装
    public void zidingyi_test10(){
        //下面就讲如何筛,首先我们需要有成员变量模拟用户提交给我们的数据。例如:用户提交以下数据进行模糊查询,然后判断年龄的区间。那我们就首先筛一下给的数据,如果数据可以,就作为条件去数据库查询
        String zidingyi_username = "";//用户提交的姓名是空字符串
        Integer zidingyi_ageBegin = 20;//用户提交的年龄最小值是20
        Integer zidingyi_ageEnd = 30;//用户提交的年龄最大值是30

        //创建条件构造器,并判断用户给我们的数据满不满足条件,如果满足才会正常的进入条件构造器
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like(StringUtils.isNotBlank(zidingyi_username),"user_name",zidingyi_username)
                .ge(zidingyi_ageBegin != null,"age",zidingyi_ageBegin)
                .le(zidingyi_ageEnd != null,"age",zidingyi_ageEnd);
        //多个条件用链式编程,每个条件的括号都是三个参数,分别是'要满足的条件'、'数据库字段'、’用户给你的字段‘。代码中用的方法跟上面的原始组装条件一样,就是写法不同
        //把赋值好的queryWrapper,放到userMapper里面
        List<User> userList = userMapper.selectList(queryWrapper);
        //由于是List集合,所以我们需要forEach遍历输出
        userList.forEach(System.out::println);
    }

    //注意如果k条数据里有逻辑字段,并且逻辑字段不为空,并且k数据已经被逻辑删除了,那么此时执行这里的查询方法,k数据即使符合条件也不会被查询到