Mybatis-Plus條件構(gòu)造器的具體使用方法
在Mybatis-Plus中,Wrapper接口的實(shí)現(xiàn)類關(guān)系如下:

可以看到,AbstractWrapper和AbstractChainWrapper是重點(diǎn)實(shí)現(xiàn),接下來我們重點(diǎn)看下AbstractWrapper以及其子類。
說明:QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父類 用于生成 sql的 where 條件, entity 屬性也用于生成 sql 的 where 條件
注意:entity 生成的 where 條件與使用各個(gè) api 生成的 where 條件 沒有任何關(guān)聯(lián)行為
文檔地址:https://mybatis.plus/guide/wrapper.html
allEq
說明
- allEq(Map<R, V> params)
- allEq(Map<R, V> params, boolean null2IsNull)
- allEq(boolean condition, Map<R, V> params, boolean null2IsNull)
全部eq(或個(gè)別isNull)
個(gè)別參數(shù)說明: params : key 為數(shù)據(jù)庫字段名, value 為字段值 null2IsNull : 為 true 則在 map 的 value 為
null 時(shí)調(diào)用 isNull 方法,為 false 時(shí)則忽略 value 為 null 的
例1: allEq({id:1,name:“老王”,age:null}) —> id = 1 and name = ‘老王' and age is null
例2: allEq({id:1,name:“老王”,age:null}, false) —> id = 1 and name = ‘老王'
- allEq(BiPredicate<R, V> filter, Map<R, V> params)
- allEq(BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull)
- allEq(boolean condition, BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull)
個(gè)別參數(shù)說明: filter : 過濾函數(shù),是否允許字段傳入比對條件中 params 與 null2IsNull : 同上
例1: allEq((k,v) -> k.indexOf(“a”) > 0, {id:1,name:“老王”,age:null}) —> name = ‘老王' and age is null
例2: allEq((k,v) -> k.indexOf(“a”) > 0, {id:1,name:“老王”,age:null}, false) —> name = ‘老王'
測試用例
@Test
public void testAllEq() {
// 設(shè)置條件
Map<String, Object> params = new HashMap<>();
params.put("name", "李四");
params.put("age", "20");
params.put("password", null);
QueryWrapper<User> wrapper = new QueryWrapper<>();
// SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE password IS NULL AND name = ? AND age = ?
// wrapper.allEq(params);
// SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE name = ? AND age = ?
// wrapper.allEq(params, false);
// SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE age = ?
// wrapper.allEq((k, v) -> (k.equals("age") || k.equals("id")), params);
// SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE name = ? AND age = ?
wrapper.allEq((k, v) -> (k.equals("age") || k.equals("id") || k.equals("name")), params);
List<User> users = this.userMapper.selectList(wrapper);
for (User user : users) {
System.out.println(user);
}
}
基本比較操作
- 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 testEq() {
QueryWrapper<User> wrapper = new QueryWrapper<>();
// SELECT id,user_name,name,age,email AS mail 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);
}
}
模糊查詢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 testLike() {
QueryWrapper<User> wrapper = new QueryWrapper<>();
// SELECT id,user_name,name,age,email AS mail FROM tb_user WHERE name LIKE ?
// 參數(shù):%五(String)
wrapper.likeLeft("name", "五");
List<User> users = this.userMapper.selectList(wrapper);
for (User user : users) {
System.out.println(user);
}
}
排序
orderBy
排序:ORDER BY 字段, …
例: orderBy(true, true, “id”, “name”) —> order by id ASC,name ASC
orderByAsc
排序:ORDER BY 字段, … ASC
例: orderByAsc(“id”, “name”) —> order by id ASC,name ASC
orderByDesc
排序:ORDER BY 字段, … DESC
例: orderByDesc(“id”, “name”) —> order by id DESC,name DESC
測試用例
@Test
public void testOrderByAgeDesc() {
QueryWrapper<User> wrapper = new QueryWrapper<>();
// 按照年齡倒序排序
// SELECT id,user_name,name,age,email AS mail 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);
}
}
邏輯查詢
or
拼接 OR
主動調(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,name,age,email AS mail FROM tb_user WHERE name = ? OR age = ?
wrapper.eq("name", "王五").or().eq("age", 21);
List<User> users = this.userMapper.selectList(wrapper);
for (User user : users) {
System.out.println(user);
}
}
select
在Mybatis-Plus查詢中,默認(rèn)查詢所有的字段,如果有需要也可以通過select方法進(jìn)行指定字段。
@Test
public void testSelect() {
QueryWrapper<User> wrapper = new QueryWrapper<>();
// SELECT id,name,age FROM tb_user WHERE name = ? OR age = ?
wrapper.eq("name", "王五").or().eq("age", 21).select("id", "name", "age"); // 指定查詢的字段
List<User> users = this.userMapper.selectList(wrapper);
for (User user : users) {
System.out.println(user);
}
}
| 查詢方式 | 說明 |
|---|---|
| setSqlSelect | 設(shè)置 SELECT 查詢字段 |
| where | WHERE 語句,拼接 + WHERE 條件 |
| and | AND 語句,拼接 + AND 字段=值 |
| andNew | AND 語句,拼接 + AND (字段=值) |
| or | OR 語句,拼接 + OR 字段=值 |
| orNew | OR 語句,拼接 + OR (字段=值) |
| eq | 等于= |
| allEq | 基于 map 內(nèi)容等于= |
| ne | 不等于<> |
| gt | 大于> |
| ge | 大于等于>= |
| lt | 小于< |
| le | 小于等于<= |
| like | 模糊查詢 LIKE |
| notLike | 模糊查詢 NOT LIKE |
| in | IN 查詢 |
| notIn | NOT IN 查詢 |
| isNull | NULL 值查詢 |
| isNotNull | IS NOT NULL |
| groupBy | 分組 GROUP BY |
| having | HAVING 關(guān)鍵詞 |
| orderBy | 排序 ORDER BY |
| orderAsc | ASC 排序 ORDER BY |
| orderDesc | DESC 排序 ORDER BY |
| exists | EXISTS 條件語句 |
| notExists | NOT EXISTS 條件語句 |
| between | BETWEEN 條件語句 |
| notBetween | NOT BETWEEN 條件語句 |
| addFilter | 自由拼接 SQL |
| last | 拼接在最后,例如:last(“LIMIT 1”) |
到此這篇關(guān)于Mybatis-Plus條件構(gòu)造器的具體使用方法的文章就介紹到這了,更多相關(guān)Mybatis-Plus條件構(gòu)造器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- mybatis-plus?Wrapper條件構(gòu)造器updateForSet更新方式
- Mybatis-Plus Wrapper條件構(gòu)造器超詳細(xì)使用教程
- Mybatis-Plus 條件構(gòu)造器 QueryWrapper 的基本用法
- 詳解MyBatis-Plus Wrapper條件構(gòu)造器查詢大全
- Mybatis-Plus 條件構(gòu)造器示例詳解
- Mybatis-Plus條件構(gòu)造器select方法返回指定字段方式
- mybatis-plus條件構(gòu)造器的操作代碼
- MyBatis-Plus條件構(gòu)造器之condition參數(shù)的使用
- MyBatis-Plus條件構(gòu)造器Wrapper應(yīng)用實(shí)例
相關(guān)文章
Java實(shí)現(xiàn)企業(yè)微信消息推送功能的詳細(xì)步驟
這篇文章主要介紹了Java實(shí)現(xiàn)企業(yè)微信消息推送功能,本文圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
SpringBoot超詳細(xì)講解集成Flink的部署與打包方法
昨天折騰了下SpringBoot與Flink集成,實(shí)際上集成特簡單,主要是部署打包的問題折騰了不少時(shí)間。想打出的包直接可以java -jar運(yùn)行,同時(shí)也可以flink run運(yùn)行,或者在flink的dashboard上上傳點(diǎn)擊啟動。結(jié)果是不行,但是使用不同的插件打包還是可以的2022-05-05
Java(基于Struts2) 分頁實(shí)現(xiàn)代碼
這篇文章介紹了Java(基于Struts2) 分頁實(shí)現(xiàn)代碼,有需要的朋友可以參考一下2013-10-10
解決Request獲取請求數(shù)據(jù)中文亂碼問題
這篇文章主要介紹了Request獲取請求數(shù)據(jù)中文亂碼問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
Java concurrency之AtomicReference原子類_動力節(jié)點(diǎn)Java學(xué)院整理
AtomicReference是作用是對"對象"進(jìn)行原子操作。這篇文章主要介紹了Java concurrency之AtomicReference原子類,需要的朋友可以參考下2017-06-06
Mybatis SQL日志如何轉(zhuǎn)換為可執(zhí)行sql
這篇文章主要介紹了Mybatis SQL日志如何轉(zhuǎn)換為可執(zhí)行sql問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
Spring boot自定義http反饋狀態(tài)碼詳解
這篇文章主要給大家介紹了Spring boot自定義http反饋狀態(tài)碼的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。2017-06-06

