x
//在上节课a_7_1的MyBatisPlusWrapperTest类接着写代码即可
//【原始写法】
//模拟开发中的组装条件
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数据即使符合条件也不会被查询到
----------------------------------------------
//【优化写法】
//上面那个组装条件还可以优化,例如下面使用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数据即使符合条件也不会被查询到