mybatis-plus條件構(gòu)造器的操作代碼
條件構(gòu)造器
在MP中,Wrapper接口的實(shí)現(xiàn)類關(guān)系如下:

在MP查詢中,還可以使用lambda方式查詢,降低數(shù)據(jù)庫列表寫錯(cuò)的風(fēng)險(xiǎn)。
Wrapper中基本比較操作
| 操作方法 | 方法說明 |
|---|---|
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, …) |
測試案例:
@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);
}
}
上面是最簡單的查詢方法,通常在開發(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類型。
舉個(gè)例子:
比如根據(jù)name來判斷,如果name不為空則拼接條件 String name = null;
wrapper.eq(User::getPassword, "123456") .ge(User::getAge, 20) .in(name!=null,User::getName, "李四", "王五", "趙六");
下面那個(gè)具體的案例,條件查詢測試案例:
@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);
}
模糊查詢
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 '王%'
測試案例:
@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é)果為:

邏輯查詢
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 <> '活著')
測試案例:
@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查詢中,默認(rèn)查詢所有的字段,如果有需要也可以通過select方法進(jìn)行指定字段。
測試案例:
@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ù):變長數(shù)組,設(shè)置多個(gè)字段名
例: orderByAsc("id", "name") ---> order by id ASC,name ASC
orderByDesc :降序排序
參數(shù):變長數(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無效 ,參數(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")
效果同上面語句。
測試案例:
@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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java正則表達(dá)式簡單使用和網(wǎng)頁爬蟲的制作代碼
java正則表達(dá)式簡單使用和網(wǎng)頁爬蟲的制作代碼,需要的朋友可以參考一下2013-05-05
Java使用Knife4j優(yōu)化Swagger接口文檔的操作步驟
在現(xiàn)代微服務(wù)開發(fā)中,接口文檔的質(zhì)量直接影響了前后端協(xié)作效率,Swagger 作為一個(gè)主流的接口文檔工具,雖然功能強(qiáng)大,但其默認(rèn)界面和部分功能在實(shí)際使用中略顯不足,而 Knife4j 的出現(xiàn)為我們提供了一種增強(qiáng)的選擇,本篇文章將詳細(xì)介紹如何在項(xiàng)目中集成和使用 Knife4j2024-12-12
SpringMVC 向jsp頁面?zhèn)鬟f數(shù)據(jù)庫讀取到的值方法
下面小編就為大家分享一篇SpringMVC 向jsp頁面?zhèn)鬟f數(shù)據(jù)庫讀取到的值方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03
淺析Java中ConcurrentHashMap的存儲(chǔ)流程
ConcurrentHashMap技術(shù)在互聯(lián)網(wǎng)技術(shù)使用如此廣泛,幾乎所有的后端技術(shù)面試官都要在ConcurrentHashMap技術(shù)的使用和原理方面對小伙伴們進(jìn)行360°的刁難,本文詳細(xì)給大家介紹一下ConcurrentHashMap的存儲(chǔ)流程,需要的朋友可以參考下2023-05-05
springboot自定義校驗(yàn)注解的實(shí)現(xiàn)過程
這篇文章主要介紹了springboot自定義校驗(yàn)注解的實(shí)現(xiàn)過程,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11
java使用spring實(shí)現(xiàn)發(fā)送mail的方法
這篇文章主要介紹了java使用spring實(shí)現(xiàn)發(fā)送mail的方法,涉及java基于spring框架發(fā)送郵件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
spring boot加載freemarker模板路徑的方法
這篇文章主要介紹了spring boot加載freemarker模板路徑的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11

