Mybatis-Plus条件构造器的具体使用方法
在Mybatis-Plus中,Wrapper接口的实现类关系如下:
可以看到,AbstractWrapper和AbstractChainWrapper是重点实现,接下来我们重点看下AbstractWrapper以及其子类。
说明:QueryWrapper(LambdaQueryWrapper)和UpdateWrapper(LambdaUpdateWrapper)的父类用于生成sql的where条件,entity属性也用于生成sql的where条件
注意:entity生成的where条件与使用各个api生成的where条件没有任何关联行为
文档地址:https://mybatis.plus/guide/wrapper.html
allEq
说明
- allEq(Map
params) - allEq(Map
params,booleannull2IsNull) - allEq(booleancondition,Map
params,booleannull2IsNull)
全部eq(或个别isNull)
个别参数说明:params:key为数据库字段名,value为字段值null2IsNull:为true则在map的value为
null时调用isNull方法,为false时则忽略value为null的
例1:allEq({id:1,name:“老王”,age:null})—>id=1andname=‘老王'andageisnull
例2:allEq({id:1,name:“老王”,age:null},false)—>id=1andname=‘老王'
- allEq(BiPredicate
filter,Map params) - allEq(BiPredicate
filter,Map params,booleannull2IsNull) - allEq(booleancondition,BiPredicate
filter,Map params,booleannull2IsNull)
个别参数说明:filter:过滤函数,是否允许字段传入比对条件中params与null2IsNull:同上
例1:allEq((k,v)->k.indexOf(“a”)>0,{id:1,name:“老王”,age:null})—>name=‘老王'andageisnull
例2:allEq((k,v)->k.indexOf(“a”)>0,{id:1,name:“老王”,age:null},false)—>name=‘老王'
测试用例
@Test publicvoidtestAllEq(){ //设置条件 Mapparams=newHashMap<>(); params.put("name","李四"); params.put("age","20"); params.put("password",null); QueryWrapper wrapper=newQueryWrapper<>(); //SELECTid,user_name,name,age,emailASmailFROMtb_userWHEREpasswordISNULLANDname=?ANDage=? //wrapper.allEq(params); //SELECTid,user_name,name,age,emailASmailFROMtb_userWHEREname=?ANDage=? //wrapper.allEq(params,false); //SELECTid,user_name,name,age,emailASmailFROMtb_userWHEREage=? //wrapper.allEq((k,v)->(k.equals("age")||k.equals("id")),params); //SELECTid,user_name,name,age,emailASmailFROMtb_userWHEREname=?ANDage=? wrapper.allEq((k,v)->(k.equals("age")||k.equals("id")||k.equals("name")),params); List users=this.userMapper.selectList(wrapper); for(Useruser:users){ System.out.println(user); } }
基本比较操作
- eq:等于=
- ne:不等于<>
- gt:大于>
- ge:大于等于>=
- lt:小于<
- le:小于等于<=
- between:BETWEEN值1AND值2
- notBetween:NOTBETWEEN值1AND值2
- in:字段IN(value.get(0),value.get(1),…)
- notIn:字段NOTIN(v0,v1,…)
测试用例
@Test publicvoidtestEq(){ QueryWrapperwrapper=newQueryWrapper<>(); //SELECTid,user_name,name,age,emailASmailFROMtb_userWHEREpassword=?ANDage>=?ANDnameIN(?,?,?) wrapper.eq("password","123456").ge("age",20).in("name","李四","王五","赵六"); List users=this.userMapper.selectList(wrapper); for(Useruser:users){ System.out.println(user); } }
模糊查询like:LIKE‘%值%'
例:like(“name”,“王”)—>namelike‘%王%'notLike:NOTLIKE‘%值%'
例:notLike(“name”,“王”)—>namenotlike‘%王%'likeLeft:LIKE‘%值'
例:likeLeft(“name”,“王”)—>namelike‘%王'likeRight:LIKE‘值%'
例:likeRight(“name”,“王”)—>namelike‘王%'
测试用例
@Test publicvoidtestLike(){ QueryWrapperwrapper=newQueryWrapper<>(); //SELECTid,user_name,name,age,emailASmailFROMtb_userWHEREnameLIKE? //参数:%五(String) wrapper.likeLeft("name","五"); List users=this.userMapper.selectList(wrapper); for(Useruser:users){ System.out.println(user); } }
排序
orderBy
排序:ORDERBY字段,…
例:orderBy(true,true,“id”,“name”)—>orderbyidASC,nameASC
orderByAsc
排序:ORDERBY字段,…ASC
例:orderByAsc(“id”,“name”)—>orderbyidASC,nameASC
orderByDesc
排序:ORDERBY字段,…DESC
例:orderByDesc(“id”,“name”)—>orderbyidDESC,nameDESC
测试用例
@Test publicvoidtestOrderByAgeDesc(){ QueryWrapperwrapper=newQueryWrapper<>(); //按照年龄倒序排序 //SELECTid,user_name,name,age,emailASmailFROMtb_userORDERBYageDESC wrapper.orderByDesc("age"); List users=this.userMapper.selectList(wrapper); for(Useruser:users){ System.out.println(user); } }
逻辑查询
or
拼接OR
主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and连接)
and
AND嵌套
例:and(i->i.eq(“name”,“李白”).ne(“status”,“活着”))—>and(name=‘李白'andstatus<>‘活着')
测试用例
@Test publicvoidtestOr(){ QueryWrapperwrapper=newQueryWrapper<>(); //SELECTid,user_name,name,age,emailASmailFROMtb_userWHEREname=?ORage=? wrapper.eq("name","王五").or().eq("age",21); List users=this.userMapper.selectList(wrapper); for(Useruser:users){ System.out.println(user); } }
select
在Mybatis-Plus查询中,默认查询所有的字段,如果有需要也可以通过select方法进行指定字段。
@Test publicvoidtestSelect(){ QueryWrapperwrapper=newQueryWrapper<>(); //SELECTid,name,ageFROMtb_userWHEREname=?ORage=? wrapper.eq("name","王五").or().eq("age",21).select("id","name","age");//指定查询的字段 List users=this.userMapper.selectList(wrapper); for(Useruser:users){ System.out.println(user); } }
查询方式 | 说明 |
---|---|
setSqlSelect | 设置SELECT查询字段 |
where | WHERE语句,拼接+WHERE条件 |
and | AND语句,拼接+AND字段=值 |
andNew | AND语句,拼接+AND(字段=值) |
or | OR语句,拼接+OR字段=值 |
orNew | OR语句,拼接+OR(字段=值) |
eq | 等于= |
allEq | 基于map内容等于= |
ne | 不等于<> |
gt | 大于> |
ge | 大于等于>= |
lt | 小于< |
le | 小于等于<= |
like | 模糊查询LIKE |
notLike | 模糊查询NOTLIKE |
in | IN查询 |
notIn | NOTIN查询 |
isNull | NULL值查询 |
isNotNull | ISNOTNULL |
groupBy | 分组GROUPBY |
having | HAVING关键词 |
orderBy | 排序ORDERBY |
orderAsc | ASC排序ORDERBY |
orderDesc | DESC排序ORDERBY |
exists | EXISTS条件语句 |
notExists | NOTEXISTS条件语句 |
between | BETWEEN条件语句 |
notBetween | NOTBETWEEN条件语句 |
addFilter | 自由拼接SQL |
last | 拼接在最后,例如:last(“LIMIT1”) |
到此这篇关于Mybatis-Plus条件构造器的具体使用方法的文章就介绍到这了,更多相关Mybatis-Plus条件构造器内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。