上篇文章我们介绍过通过 mybatis plus 进行增删改查,如下这段代码:
/** * 根据id修改 * update user set user_name=?, user_age=? where (id = ?) */@testpublic void testudpatebyid(){ user user = new user(); user.setuserage(25); user.setusername(test update); updatewrapper updatewrapper = new updatewrapper(); updatewrapper.eq(id,3); int num = usermapper.update(user, updatewrapper); system.out.println(修改的记录数为:+num);} /** * 查询指定记录 * select id,user_name,user_age from user where (user_name = ?) */@testpublic void testselectwrapper(){ querywrapper wrapper = new querywrapper(); wrapper.eq(user_name,it可乐); list users = usermapper.selectlist(wrapper); users.foreach(x- > system.out.println(x.getid()+-+x.getusername()+-+x.getuserage()));}上面两个方法分别是根据id修改表记录,和根据user_name查询记录。构造的条件使用了 updatewrapper 和 querywrapper ,那么这是什么呢?其实 mybatis plus 通过条件构造器可以组成复杂的sql语句。本篇博客我们将详细介绍。
1、wrappermybatis plus 提供的几种条件构造器,关系如下:
我们主要通过 querywrapper 和 updatewrapper 进行条件构造,这两个和 lambdaquerywrapper、lambdaupdatewrapper 差不多是等价的,只不过后者采用了 jdk1.8 提供的lambda 语法,使用起来更简洁。
2、语法详情总结关于条件构造器的各个用法介绍,可以参考官网:https://mp.baomidou.com/guide/wrapper.html#abstractwrapper
这里我们做一下总结:
方法名说明用法实例等价sql
官网地址 https://mp.baomidou.com/guide/wrapper.html#abstractwrapper ----: :----:
alleq(map params) 全部等于 map.put(id,3);map.put(user_name,it可乐);alleq(map) user_name = it可乐 and id = 3
eq(r column, object val) 等于 = eq(id,3) id = 3
ne(r column, object val) 不等于 ne(id, 3) id 3
gt(r column, object val) 大于 > gt(user_age,18) user_age > 18
ge(r column, object val) 大于等于 >= ge(user_age,18) user_age >= 18
lt(r column, object val) 小于 < lt(user_age,18) user_age < 18
le(r column, object val) 小于等于 <= le(user_age,18) user_age 2) id not in (select id from user where id > 2
groupby(r... columns) 分组:group by 字段, ... groupby(id,user_age) group by id,user_age
orderbyasc(r... columns) 排序:order by 字段, ... asc orderbyasc(id,user_age) order by id asc,user_age asc
orderbydesc(r... columns) 排序:order by 字段, ... desc orderbydesc(id,user_age) order by id desc,user_age desc
orderby(boolean condition, boolean isasc, r... columns) order by 字段, ... orderby(true,true,id,user_age) order by id asc,user_age asc
having(string sqlhaving, object... params) having ( sql语句 ) having(sum(user_age)>{0},25) having sum(user_age)>25
or() 拼接 or eq(id,1).or().eq(user_age,25) id = 1 or user_age = 25
and(consumerconsumer) and 嵌套 and(i->i.eq(id,1).ne(user_age,18)) id = 1 and user_age 25
nested(consumerconsumer) 正常嵌套 不带 and 或者 or nested(i->i.eq(id,1).ne(user_age,18)) id = 1 and user_age 25
apply(string applysql, object... params) 拼接 sql(不会有sql注入风险) apply(user_age>{0},25 or 1=1) user_age >'25 or 1=1'
last(string lastsql) 拼接到 sql 的最后,多次调用以最后一次为准(有sql注入的风险) last(limit 1) limit 1
exists(string existssql) 拼接 exists ( sql语句 ) exists(select id from user where user_age = 1) exists (select id from user where user_age = 1)
notexists(string notexistssql) 拼接 not exists ( sql语句 ) notexists(select id from user where user_age = 1) not exists (select id from user where user_age = 1)
3、语法详情演示对于上表出现的每个语法,这里通过代码展示出来。
更多可以参考地址:https://github.com/ysocean/mybatisplusstudy.git
package com.ys.mybatisplusstudy; import com.baomidou.mybatisplus.core.conditions.query.querywrapper;import com.ys.mybatisplusstudy.entry.user;import com.ys.mybatisplusstudy.mapper.usermapper;import org.junit.jupiter.api.test;import org.springframework.beans.factory.annotation.autowired;import org.springframework.boot.test.context.springboottest; import java.util.arraylist;import java.util.hashmap;import java.util.list;import java.util.map; @springboottestpublic class wrappertest { @autowired private usermapper usermapper; /** * 新增一条记录 */ @test public void testinsert(){ user user = new user(); user.setid(4l); user.setusername(test insert); user.setuserage(1); int insert = usermapper.insert(user); system.out.println(影响记录数:+insert); } /** * alleq 全部等于 * 实例sql:select id,user_name,user_age from user where (user_name = ? and id = ?) */ @test public void testalleq(){ querywrapper querywrapper = new querywrapper(); map map = new hashmap(); map.put(id,3); map.put(user_name,it可乐); querywrapper.alleq(map); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * eq 等于 * 实例sql:select id,user_name,user_age from user where (id = ?) */ @test public void testeq(){ querywrapper querywrapper = new querywrapper(); querywrapper.eq(id,3); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * ne 不等于 * 实例sql:select id,user_name,user_age from user where (id ?) */ @test public void testne(){ querywrapper querywrapper = new querywrapper(); querywrapper.ne(id,3); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * gt 大于 * 实例sql:select id,user_name,user_age from user where (user_age > ?) */ @test public void testgt(){ querywrapper querywrapper = new querywrapper(); querywrapper.gt(user_age,18); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * ge 大于等于 * 实例sql:select id,user_name,user_age from user where (user_age >= ?) */ @test public void testge(){ querywrapper querywrapper = new querywrapper(); querywrapper.ge(user_age,18); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * lt 小于 * 实例sql:select id,user_name,user_age from user where (user_age < ?) */ @test public void testlt(){ querywrapper querywrapper = new querywrapper(); querywrapper.lt(user_age,18); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * le 小于等于 * 实例sql:select id,user_name,user_age from user where (user_age <= ?) */ @test public void testle(){ querywrapper querywrapper = new querywrapper(); querywrapper.le(user_age,18); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * between 值1和值2之间,两边临界值都包含 * 实例sql:select id,user_name,user_age from user where (user_age between ? and ?) */ @test public void testbetween(){ querywrapper querywrapper = new querywrapper(); querywrapper.between(user_age,18,25); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * notbetween 不在值1和值2之间,两边临界值都包含 * 实例sql:select id,user_name,user_age from user where (user_age not between ? and ?) */ @test public void testnobetween(){ querywrapper querywrapper = new querywrapper(); querywrapper.notbetween(user_age,18,25); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * like 模糊查询,会在参数左右两边加上 % * 实例sql:select id,user_name,user_age from user where (user_name like ?) */ @test public void testlike(){ querywrapper querywrapper = new querywrapper(); querywrapper.like(user_name,可乐); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * notlike not like ‘%parameter%’ * 实例sql:select id,user_name,user_age from user where (user_name not like ?) */ @test public void testnotlike(){ querywrapper querywrapper = new querywrapper(); querywrapper.notlike(user_name,可乐); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * likeleft like ‘%parameter’ * 实例sql:select id,user_name,user_age from user where (user_name like '%parameter') */ @test public void testlikeleft(){ querywrapper querywrapper = new querywrapper(); querywrapper.likeleft(user_name,可乐); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * likeright like ‘parameter%’ * 实例sql:select id,user_name,user_age from user where (user_name like 'parameter%') */ @test public void testlikeright(){ querywrapper querywrapper = new querywrapper(); querywrapper.likeright(user_name,可乐); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * isnull 判断字段为null * 实例sql:select id,user_name,user_age from user where (user_name is null) */ @test public void testisnull(){ querywrapper querywrapper = new querywrapper(); querywrapper.isnull(user_name); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * isnotnull 判断字段不为null * 实例sql:select id,user_name,user_age from user where (user_name is not null) */ @test public void testisnotnull(){ querywrapper querywrapper = new querywrapper(); querywrapper.isnotnull(user_name); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * in 范围定值查询 * 实例sql:select id,user_name,user_age from user where (user_age in (?,?,?)) */ @test public void testin(){ querywrapper querywrapper = new querywrapper(); list querylist = new arraylist(); querylist.add(18); querylist.add(1); querylist.add(25); querywrapper.in(user_age,querylist); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * notin * 实例sql:select id,user_name,user_age from user where (user_age in (?,?,?)) */ @test public void testnotin(){ querywrapper querywrapper = new querywrapper(); list querylist = new arraylist(); querylist.add(18); querylist.add(1); querylist.add(25); querywrapper.notin(user_age,querylist); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * insql * 实例sql:select id,user_name,user_age from user where (id in (select id from user)) */ @test public void testinsql(){ querywrapper querywrapper = new querywrapper(); //查询所有数据 querywrapper.insql(id,select id from user); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * notinsql * 实例sql:select id,user_name,user_age from user where (id not in (select id from user where id > 2)) */ @test public void testnotinsql(){ querywrapper querywrapper = new querywrapper(); //查询所有数据 querywrapper.notinsql(id,select id from user where id > 2); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * groupby 分组 * 下面sql有个问题,在mysql8.0版本中,是可以执行下面sql语句的,select user_name并没有出现在group by 语句中 * 实例sql:select id,user_name,user_age from user group by id,user_age */ @test public void testgroupby(){ querywrapper querywrapper = new querywrapper(); querywrapper.groupby(id,user_age); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * orderbyasc 升序 * 实例sql:select id,user_name,user_age from user order by id asc,user_age asc */ @test public void testorderbyasc(){ querywrapper querywrapper = new querywrapper(); querywrapper.orderbyasc(id,user_age); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * orderbydesc 降序 * 实例sql:select id,user_name,user_age from user order by id desc,user_age desc */ @test public void testorderbydesc(){ querywrapper querywrapper = new querywrapper(); querywrapper.orderbydesc(id,user_age); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * orderby 指定顺序排序 * 实例sql:select id,user_name,user_age from user order by id asc,user_age asc */ @test public void testorderby(){ querywrapper querywrapper = new querywrapper(); querywrapper.orderby(true,true,id,user_age); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * having * 实例sql:select id,user_name,user_age from user group by id,user_age having sum(user_age) >? */ @test public void testhaving(){ querywrapper querywrapper = new querywrapper(); querywrapper.groupby(id,user_age); querywrapper.having(sum(user_age) >{0},25); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * having * 实例sql:select id,user_name,user_age from user where (id = ? or user_age = ?) */ @test public void testor(){ querywrapper querywrapper = new querywrapper(); querywrapper.eq(id,1); querywrapper.or(); querywrapper.eq(user_age,25); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * and * 实例sql:select id,user_name,user_age from user where ((id = ? and user_age ?)) */ @test public void testand(){ querywrapper querywrapper = new querywrapper(); querywrapper.and(i- >i.eq(id,1).ne(user_age,18)); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * nested * 实例sql:select id,user_name,user_age from user where ((id = ? and user_age ?)) */ @test public void testnested(){ querywrapper querywrapper = new querywrapper(); querywrapper.nested(i- >i.eq(id,1).ne(user_age,18)); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * apply * 实例sql:select id,user_name,user_age from user where (user_age >?) */ @test public void testapplyd(){ querywrapper querywrapper = new querywrapper(); querywrapper.apply(user_age >{0},25 or 1=1); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * last * 实例sql:select id,user_name,user_age from user limit 1 */ @test public void testlast(){ querywrapper querywrapper = new querywrapper(); querywrapper.last(limit 1 ); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * exists * 实例sql:select id,user_name,user_age from user where (exists (select id from user where user_age = 1)) */ @test public void testexists(){ querywrapper querywrapper = new querywrapper(); querywrapper.exists(select id from user where user_age = 1); list list = usermapper.selectlist(querywrapper); system.out.println(list); } /** * notexists * 实例sql:select id,user_name,user_age from user where (exists (select id from user where user_age = 1)) */ @test public void testnotexists(){ querywrapper querywrapper = new querywrapper(); querywrapper.notexists(select id from user where user_age = 1); list list = usermapper.selectlist(querywrapper); system.out.println(list); }}4、lambdaquerywrapper和lambdaupdatewrapper(推荐)lambdaquerywrapper 和 lambdaupdatewrapper 这是相对于 querywrapper 及 updatewrapper 的 lmbda 语法实现方式。
分别通过如下两种方式获取:
//两种方式 lambdaquerywrapper querylambda = new querywrapper().lambda();lambdaquerywrapper lambdaquerywrapper = new lambdaquerywrapper();//两种方式lambdaupdatewrapper updatelambda = new updatewrapper().lambda();lambdaupdatewrapper lambdaupdatewrapper = new lambdaupdatewrapper();注意:获取lambdaquerywrapper 和 lambdaupdatewrapper 对象时,为了使用lambda语法,要使用泛型。
下面我演示几个实例:
/** * lambdaquerywrapper * sql实例:select id,user_name,user_age from user where (id = ? and user_age ?) */@testpublic void testlambdaquerywrapper(){ lambdaquerywrapper querylambda = new lambdaquerywrapper(); querylambda.eq(user::getid,1).ne(user::getuserage,25); list users = usermapper.selectlist(querylambda); system.out.println(users); } /** * lambdaquerywrapper * sql实例:update user set user_name=? where (user_name = ?) */@testpublic void testlambdaupdatewrapper(){ user user = new user(); user.setusername(lambdaupdatewrapper); lambdaupdatewrapper userlambdaupdatewrapper = new lambdaupdatewrapper(); userlambdaupdatewrapper.eq(user::getusername,it可乐); usermapper.update(user,userlambdaupdatewrapper); }5、总结对于mybatis plus 中的四种条件构造器,我们就到此结束了,大家可以按照我的实例敲一遍代码,基本上就没啥问题了。
有没有发现使用 lamba 语法很爽,语法简洁,另外有个优点是,使用querywrapper或者updatewrapper时,对于条件的某个列,我们是写的字符串配置,比如 querywrapper.eq(id,1);这里的id是数据库表的列名,很有可能我们会写错,但是通过lambda 的方式,lambdaquerywrapper.eq(user::getid,1),这样就不会有写错的可能了。所以推荐大家使用lambda 的方式。
至此,mybatis plus 的常规用法就全部介绍结束了,当然,事情还远没有结束,为了让大家用的更爽,后续将给大家介绍一些高阶玩法。
人工智能在支付领域怎样更加层次的应用
谷歌曝出大丑闻 这次比苹果更典型
雅特力全新开发软件工具可支持AT32全系列MCU产品
基于TI的达芬奇 DSP系统解决方案适用于高效数字视频应用
高通骁龙835对比骁龙821,单核多核cpu全面对比,骁龙835比骁龙821提升了多少
mybatis plus的常规用法
实际功率的计算公式
芯片制程中常见的介质材料有哪些?都有什么作用?
英特尔出售芯片业务后 联发科为其PC供应5G SoC
热敏电阻应用正当时!行业竞争向高端应用转移,材料与工艺积累核心竞争力
换热器管板防腐怎么保护效果更好
半导体大硅片是否会出现产能过剩?
串联谐振和并联谐振的区别与特点有哪些 ?
由于地缘政治的不确定性 世创电子调降财测
智能手环的各种功能到底可靠不?
应用于超越摩尔器件的三种制造设备类型的现状
升压充电管理IC FS5080E兼容替代替换CS5080E/ZCC5080E
3种电磁干扰传导耦合方式
Ionity计划在欧洲扩大电动汽车充电网络
区块链比较适合哪一些领域