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 條件與使用各個 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(或個別isNull)
個別參數(shù)說明: params : key 為數(shù)據(jù)庫字段名, value 為字段值 null2IsNull : 為 true 則在 map 的 value 為
null 時調(diào)用 isNull 方法,為 false 時則忽略 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)
個別參數(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 表示緊接著下一個方法不是用 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)文章
JVM教程之Java代碼編譯和執(zhí)行的整個過程(二)
這篇文章主要介紹了JVM學(xué)習(xí)筆記第二篇,關(guān)于Java代碼編譯和執(zhí)行的整個過程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03MyBatis-plus報(bào)錯Property ‘sqlSessionFactory‘ or 
這篇文章主要給大家介紹了MyBatis-plus 報(bào)錯 Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required的兩種解決方法,如果遇到相同問題的朋友可以參考借鑒一下2023-12-12Java中String、StringBuffer、StringBuilder的區(qū)別詳解
java中String、StringBuffer、StringBuilder是編程中經(jīng)常使用的字符串類,他們之間有什么區(qū)別呢?下面小編給大家總結(jié)了Java中String、StringBuffer、StringBuilder的區(qū)別詳解,需要的朋友參考下吧2016-06-06java+selenium實(shí)現(xiàn)滑塊驗(yàn)證
現(xiàn)在越來越多的網(wǎng)站都使用采用滑塊驗(yàn)證來作為驗(yàn)證機(jī)制,用于判斷用戶是否為人類而不是機(jī)器人,本文就將利用java和selenium實(shí)現(xiàn)滑塊驗(yàn)證,希望對大家有所幫助2023-12-12