Mybatis-Plus條件構造器的具體使用方法
在Mybatis-Plus中,Wrapper介面的實現類關係如下:
可以看到,AbstractWrapper和AbstractChainWrapper是重點實現,接下來我們重點看下AbstractWrapper以及其子類。
說明:QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父類 用於生成 sql的 where 條件,entity 屬性也用於生成 sql 的 where 條件
注意:entity 生成的 where 條件與使用各個 api 生成的 where 條件 沒有任何關聯行為
文件地址:https://mybatis.plus/guide/wrapper.html
allEq
說明
- allEq(Map<R,V> params)
- allEq(Map<R,V> params,boolean null2IsNull)
- allEq(boolean condition,Map<R,boolean null2IsNull)
全部eq(或個別isNull)
個別引數說明: params : key 為資料庫欄位名,value 為欄位值 null2IsNull : 為 true 則在 map 的 value 為
null 時呼叫 isNull 方法,為 false 時則忽略 value 為 null 的
例1: allEq({id:1,name:“老王”,age:null}) —> id = 1 and name = ‘老王' and age is null
- allEq(BiPredicate<R,V> filter,V> params)
- allEq(BiPredicate<R,BiPredicate<R,boolean null2IsNull)
個別引數說明: filter : 過濾函式,是否允許欄位傳入比對條件中 params 與 null2IsNull : 同上
例1: allEq((k,v) -> k.indexOf(“a”) > 0,{id:1,age:null}) —> name = ‘老王' and age is null
測試用例
@Test public void testAllEq() { // 設定條件 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,email AS mail FROM tb_user WHERE name = ? AND age = ? // wrapper.allEq(params,false); // SELECT id,email AS mail FROM tb_user WHERE age = ? // wrapper.allEq((k,v) -> (k.equals("age") || k.equals("id")),params); // SELECT id,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,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,email AS mail FROM tb_user WHERE name LIKE ? // 引數:%五(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 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,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
主動呼叫 or 表示緊接著下一個方法不是用 and 連線!(不呼叫 or 則預設為使用 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,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查詢中,預設查詢所有的欄位,如果有需要也可以通過select方法進行指定欄位。
@Test public void testSelect() { QueryWrapper<User> wrapper = new QueryWrapper<>(); // SELECT id,age FROM tb_user WHERE name = ? OR age = ? wrapper.eq("name",21).select("id","name","age"); // 指定查詢的欄位 List<User> users = this.userMapper.selectList(wrapper); for (User user : users) { System.out.println(user); } }
查詢方式 | 說明 |
---|---|
setSqlSelect | 設定 SELECT 查詢欄位 |
where | WHERE 語句,拼接 + WHERE 條件 |
and | AND 語句,拼接 + AND 欄位=值 |
andNew | AND 語句,拼接 + AND (欄位=值) |
or | OR 語句,拼接 + OR 欄位=值 |
orNew | OR 語句,拼接 + OR (欄位=值) |
eq | 等於= |
allEq | 基於 map 內容等於= |
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 關鍵詞 |
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”) |
到此這篇關於Mybatis-Plus條件構造器的具體使用方法的文章就介紹到這了,更多相關Mybatis-Plus條件構造器內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!