条件构造器就是指的是mybatisPlus的条件筛选,通过mybatisPlus的条件构造器对数据进行筛选,让mybatisPlus执行where语句。
2.条件构造器的体系图(3.0x版本以上) 3.语法| 方法名 | 说明 | 用法实例 | 等价SQL |
|---|---|---|---|
| eq | 等于 = | 例:eq(“name”,“唐”) | name = ‘唐’ |
| ne | 不等于<> | 例:ne(“name”,“唐”) | name <> ‘唐’ |
| gt | 大于> | 例:gt(“age”,18) | age > 18 |
| ge | 大于等于>= | 例:ge(“age”,18) | age >= 18 |
| lt | 小于< | 例:lt(“age”,18) | age < 18 |
| le | 小于<= | 例:le(“age”,18) | age <= 18 |
| between | between 值1 and 值2 | 例:between(“age”,18,30) | age between 18 and 30 |
| notBetween | not between 值1 and 值2 | 例:notBetween(“age”,18,30) | age not between 18 and 30 |
| like | like ‘%值%’ | 例:like(“name”,“唐”) | name like ‘%唐%’ |
| notLike | not like ‘%值%’ | 例:notLike(“name”,“唐”) | name not like ‘%唐%’ |
| likeLeft | like ‘%值’ | 例:likeLeft(“name”,“唐”) | name like ‘%唐’ |
| likeRight | like ‘值%’ | 例:likeRight(“name”,“唐”) | name like ‘唐%’ |
| isNull | 字段 is null | 例:isNull(“name”) | name is null |
| isNotNull | 字段 is not null | 例:isNotNull(“name”) | name is not null |
| in | 字段 in (值1,值2) | 例:.in(“age”,18,20) | age in (18,20) |
| notIn | 字段 not in (值1,值2) | 例:notIn(“age”,18,20) | age not in (18,20) |
| inSql | 字段 in (sql语句) | 例:inSql(“id”,“select id from table where id < 3”) | id in (select id from table where id < 3) |
| notInSql | 字段 not in (sql语句) | 例:notInSql(“id”,“select id from table where id < 3”) | id not in (select id from table where id < 3) |
| groupBy | 分组:group by 字段1,字段2 | 例:groupBy(“id”,“name”) | group by id,name |
| orderByAsc | 排序:order by 字段1,字段2 asc | 例:orderByAsc(“id”,name) | order by id asc,name asc |
| orderBydesc | 排序:order by 字段1,字段2 desc | 例:orderByDesc(“id”,“name”) | order by id desc,name desc |
| orderBy | 排序:order by 字段 | 例:.orderBy(true, true, “id”, “name”) PS:第一个true是开启orderby,true开启,false关闭;第二个true是开启asc还是desc,true为asc,false为desc; | order by id asc,name asc |
| having | having(sql语句) | 例:.having(“sum(age) > 10”) PS:要和groupBy一起使用 | having sum(age) > 10 |
| or | 拼接or | 例:eq(“id”,1).or().eq(“name”,“唐”) PS:主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and连接) | id = 1 or name = ‘唐’ |
| or嵌套 | 拼接or嵌套 | 例:or(i -> i.eq(“name”, “李白”).ne(“state”, 0)) | or (name = ‘李白’ and status <> 0) |
| and嵌套 | 拼接and嵌套 | 例:and(i -> i.eq(“name”, “李白”).ne(“state”,0)) | and (name = ‘李白’ and state <> 0) |
| apply | 拼接sql | 例:apply(“id = 1”) | id = 1 |
| apply函数 | apply函数使用 | 例:apply(“date_format(dateColumn,‘%Y-%m-%d’) = ‘2008-08-08’”) | date_format(dateColumn,‘%Y-%m-%d’) = ‘2008-08-08’") |
| last | 直接拼接sql | 例:last(“limit 1”) PS:无视优化规则直接拼接到 sql 的最后,只能调用一次,多次调用以最后一次为准 有sql注入的风险,请谨慎使用 | limit 1 |
| exists | 拼接exists(sql语句) | 例:exists(“select id from table where age = 1”) | exists (select id from table where age = 1) |
| notExists | 拼接not exists(sql语句) | 例:notExists(“select id from table where age = 1”) | not exists (select id from table where age = 1) |
| nested | 正常嵌套 不带 AND 或者 OR | 例:nested(i -> i.eq(“name”, “李白”).ne(“state”, 0)) | (name = ‘李白’ and state<> 0) |
1.说明
对象封装操作类,用于查询;
3.x的版本才有QueryWrapper,EntityWrapper继承AbstractWrapper抽象父类,来让用户自由的构建查询条件,简单编辑、提高开发效率
PS:使用的是数据库字段、不是Java属性
2.测试代码
QueryWrapper2.EntityWrapperwrapper = new QueryWrapper<>(); wrapper.eq("user_name",userName); List list = baseMapper.selectList(wrapper);
1.说明
对象封装操作类,用于查询;
3.x以下版本才有EntityWrapper,EntityWrapper继承Wrapper抽象父类
2.测试代码
EntityWrapper3.UpdateWrapperwrapper = new EntityWrapper<>(); wrapper.eq("user_name",userName); List list = baseMapper.selectList(wrapper); Wrapper wrapper = new EntityWrapper<>(); wrapper.eq("user_name",userName); List list = baseMapper.selectList(wrapper);
1.说明
条件封装操作类,用于更新。
和QueryWrapper(),EntityWrapper条件构造器相比,区别就是可以设置字段值
2.测试代码
UpdateWrapper4.LambdaQueryWrapperwrapper = new UpdateWrapper<>(); wrapper.eq("user_id", user.getUserId()); wrapper.set("password",null); baseMapper.update(user, wrapper);
1.说明
利用lambda表达式的一个用法(类::静态方法)获得属性对应字段,可防止写错字段名,用于查询。
2.测试代码
public void selectList4(){
//多条件拼接,有条件就拼接
String name="";
Integer agebegin = 20;
Integer ageend=21;
LambdaQueryWrapper lambdaQueryWrapper=new LambdaQueryWrapper<>();
//利用lambda表达式的一个用法(类::静态方法)获得属性
lambdaQueryWrapper.like(StringUtils.isNotBlank(name),User_plus::getName,name)
.ge(agebegin!=null,User_plus::getAge,agebegin)
.le(ageend!=null,User_plus::getAge,agebegin);
List userlist = user_plusDAO.selectList(lambdaQueryWrapper);
userlist.forEach(System.out::println);
}
5.LambdaUpdateWrapper
1.说明
Update 条件封装,利用lambda表达式的一个用法(类::静态方法)获得属性对应字段,可防止写错字段名,,用于更新。
和LambdaQueryWrapper条件构造器相比,区别就是可以设置字段值
2.测试代码
public void updateWrapper(){
User_plus user=new User_plus();
LambdaUpdateWrapper lambdaUpdateWrapper=new LambdaUpdateWrapper<>();
//设置更新字段
lambdaUpdateWrapper.set(User_plus::getName,"张飞");
//设置更新条件
lambdaUpdateWrapper.eq(User_plus::getId,1);
int i = user_plusDAO.update(user,lambdaUpdateWrapper);
System.out.println(i);
}



