mybatis-plus條件構(gòu)造器的操作代碼
條件構(gòu)造器
在MP中,Wrapper接口的實(shí)現(xiàn)類(lèi)關(guān)系如下:
在MP查詢(xún)中,還可以使用lambda方式查詢(xún),降低數(shù)據(jù)庫(kù)列表寫(xiě)錯(cuò)的風(fēng)險(xiǎn)。
Wrapper中基本比較操作
操作方法 | 方法說(shuō)明 |
---|---|
eq | 等于 = |
ne | 不等于 <> |
gt | 大于 > |
ge | 大于等于 >= |
lt | 小于 < |
le | 小于等于 <= |
between | BETWEEN 值1 AND 值2 |
notBetween | NOT BETWEEN 值1 AND 值2 |
in | 字段 IN (value.get(0), value.get(1), …) |
notIn | 字段 NOT IN (v0, v1, …) |
測(cè)試案例:
@Test public void testEqCp() { QueryWrapper<User> wrapper = new QueryWrapper<>(); //SELECT id,user_name,password,name,age,email FROM tb_user WHERE password = ? AND age >= ? AND name IN (?,?,?) wrapper.eq("password", "123456") .ge("age", 20) .in("name", "李四", "王五", "趙六"); List<User> users = this.userMapper.selectList(wrapper); for (User user : users) { System.out.println(user); } }
也可以用Lambda方式構(gòu)造條件:
@Test public void testEqCp() { LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); //SELECT id,user_name,password,name,age,email FROM tb_user WHERE password = ? AND age >= ? AND name IN (?,?,?) wrapper.eq(User::getPassword, "123456") .ge(User::getAge, 20) .in(User::getName, "李四", "王五", "趙六"); List<User> users = this.userMapper.selectList(wrapper); for (User user : users) { System.out.println(user); } }
上面是最簡(jiǎn)單的查詢(xún)方法,通常在開(kāi)發(fā)中要根據(jù)表達(dá)式進(jìn)行判斷,表達(dá)式為true則拼接條件,如下:
eq(boolean condition, R column, Object val) in(boolean condition, R column, Object... values) ...
上面代碼中的condition
就是要進(jìn)行計(jì)算的表達(dá)式,最終表達(dá)式結(jié)果為boolean類(lèi)型。
舉個(gè)例子:
比如根據(jù)name來(lái)判斷,如果name不為空則拼接條件 String name = null;
wrapper.eq(User::getPassword, "123456") .ge(User::getAge, 20) .in(name!=null,User::getName, "李四", "王五", "趙六");
下面那個(gè)具體的案例,條件查詢(xún)測(cè)試案例:
@Test public void testEq3() { //條件 LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>(); String name = null; Integer age = 20; queryWrapper.eq(name != null && !name.equals(""), User::getName, name);//等于 queryWrapper.gt(age != null, User::getAge, age);//大于? List<User> users = userMapper.selectList(queryWrapper); System.out.println(users); }
模糊查詢(xún)
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 '王%'
測(cè)試案例:
@Test public void testWrapper() { QueryWrapper<User> wrapper = new QueryWrapper<>(); //SELECT id,user_name,password,name,age,email FROM tb_user WHERE name LIKE ? //Parameters: %曹%(String) wrapper.likeRight("name", "曹"); wrapper.select("id", "name","birthday"); List<User> users = this.userMapper.selectList(wrapper); for (User user : users) { System.out.println(user); } }
運(yùn)行結(jié)果為:
邏輯查詢(xún)
or
拼接 OR 主動(dòng)調(diào)用 or 表示緊接著下一個(gè)**方法**不是用 and 連接!(不調(diào)用 or 則默認(rèn)為使用 and 連接)
and
AND 嵌套 例: and(i -> i.eq("name", "李白").ne("status", "活著")) ---> and (name = '李白' and status <> '活著')
測(cè)試案例:
@Test public void testOr() { QueryWrapper<User> wrapper = new QueryWrapper<>(); //SELECT id,user_name,password,name,age,email FROM tb_user WHERE name = ? OR age = ? wrapper.eq("name", "李四").or().eq("age", 24); //變?yōu)閍nd方式 wrapper.eq("name", "李四").eq("age", 24); List<User> users = this.userMapper.selectList(wrapper); for (User user : users) { System.out.println(user); } }
將上面代碼改為lambda方式構(gòu)造條件:
@Test public void testOr() { LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); //SELECT id,user_name,password,name,age,email FROM tb_user WHERE name = ? OR age = ? wrapper.eq(User::getName,"李四").or().eq(User::getAge, 24); //變?yōu)閍nd方式 wrapper.eq(User::getName, "李四").eq(User::getAge", 24); List<User> users = this.userMapper.selectList(wrapper); for (User user : users) { System.out.println(user); } }
select
在MP查詢(xún)中,默認(rèn)查詢(xún)所有的字段,如果有需要也可以通過(guò)select方法進(jìn)行指定字段。
測(cè)試案例:
@Test public void testWrapper() { QueryWrapper<User> wrapper = new QueryWrapper<>(); //SELECT id,name,age FROM tb_user WHERE name = ? OR age = ? wrapper.eq("name", "李四") .or() .eq("age", 24) .select("id", "name", "age"); List<User> users = this.userMapper.selectList(wrapper); for (User user : users) { System.out.println(user); } }
Lambda方式構(gòu)造條件:
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getName, "李四") .or() .eq(User::getAge, 24) .select(User::getId, User::getName, User::getAge);
排序
orderByAsc :升序排序
參數(shù):變長(zhǎng)數(shù)組,設(shè)置多個(gè)字段名 例: orderByAsc("id", "name") ---> order by id ASC,name ASC
orderByDesc :降序排序
參數(shù):變長(zhǎng)數(shù)組,設(shè)置多個(gè)字段名 例: orderByDesc("id", "name") ---> order by id DESC,name DESC
orderBy : 自定義排序規(guī)則
方法定義:orderBy(boolean condition, boolean isAsc, R... columns) 參數(shù)1:true有效,false無(wú)效 ,參數(shù)2:是否升序,參數(shù)3..設(shè)置多個(gè)字段 例: `orderBy(true, true, "id", "name")`‐‐‐>`order by id ASC,name ASC`
也可以多個(gè)orderBy拼裝,如下:
orderBy(true, true, "id").orderBy(true, true, "name")
效果同上面語(yǔ)句。
測(cè)試案例:
@Test public void testOrder() { QueryWrapper<User> wrapper = new QueryWrapper<>(); //SELECT id,user_name,password,name,age,email FROM tb_user ORDER BY age DESC wrapper.orderByDesc("age"); List<User> users = this.userMapper.selectList(wrapper); for (User user : users) { System.out.println(user); } }
Lambda方式構(gòu)造條件:
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.orderByDesc(User::getAge);
到此這篇關(guān)于mybatis-plus條件構(gòu)造器的文章就介紹到這了,更多相關(guān)mybatis-plus條件構(gòu)造器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis Plus 自定義方法實(shí)現(xiàn)分頁(yè)功能的示例代碼
這篇文章主要介紹了Mybatis Plus 自定義方法實(shí)現(xiàn)分頁(yè)功能的示例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08關(guān)于SpringBoot中事務(wù)失效的幾種情況
這篇文章主要介紹了關(guān)于SpringBoot中事務(wù)失效的幾種情況,Spring AOP默認(rèn)使用動(dòng)態(tài)代理,會(huì)給被代理的類(lèi)生成一個(gè)代理類(lèi),事務(wù)相關(guān)的操作都通過(guò)代理來(lái)完成,使用內(nèi)部方法調(diào)用時(shí),使用的是實(shí)例調(diào)用,沒(méi)有通過(guò)代理類(lèi)調(diào)用方法,因此事務(wù)不會(huì)檢測(cè)到失敗,需要的朋友可以參考下2023-08-08關(guān)于Selenium的UI自動(dòng)化測(cè)試屏幕截圖功能實(shí)例代碼
今天小編就為大家分享一篇關(guān)于Selenium的UI自動(dòng)化測(cè)試屏幕截圖功能實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Springboot 使用 JSR 303 對(duì) Controller 控制層校驗(yàn)及 Service 服務(wù)層 AOP 校驗(yàn)
這篇文章主要介紹了Springboot 使用 JSR 303 對(duì) Controller 控制層校驗(yàn)及 Service 服務(wù)層 AOP 校驗(yàn) 使用消息資源文件對(duì)消息國(guó)際化的相關(guān)知識(shí),需要的朋友可以參考下2017-12-12java實(shí)現(xiàn)http請(qǐng)求工具類(lèi)示例
這篇文章主要介紹了java實(shí)現(xiàn)http請(qǐng)求工具類(lèi)示例,需要的朋友可以參考下2014-05-05詳解Java程序并發(fā)的Wait-Notify機(jī)制
這篇文章主要介紹了詳解Java程序并發(fā)的Wait-Notify機(jī)制,多線程并發(fā)是Java編程中的重要部分,需要的朋友可以參考下2015-07-07基于SpringBoot多線程@Async的使用體驗(yàn)
這篇文章主要介紹了SpringBoot多線程@Async的使用體驗(yàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12