一、條件構造器Wrapper
Mybatis Plus為我們提供了如下的一些條件構造器,我們可以利用它們實作查詢條件、洗掉條件、更新條件的構造,

條件構造器用于給如下的Mapper方法傳參,通常情況下:
- updateWrapper用于給update方法傳條件引數
- queryWrapper用于給delete和select方法傳參
public interface BaseMapper<T> extends Mapper<T> {
int delete(@Param("ew") Wrapper<T> wrapper);
int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
T selectOne(@Param("ew") Wrapper<T> queryWrapper);
Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);
List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);
List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);
IPage<T> selectPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper);
IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper);
}
舉例一:like 條件構造
String name = "字母"; //name不為空
String email = ""; //email為空串
QueryWrapper<User> query = new QueryWrapper<>();
query.like(StringUtils.isNotEmpty(name), "name", name)
//因為email為空串,該條件未生效
.like(StringUtils.isNotEmpty(email), "email", email);
List<User> list = userMapper.selectList(query);
list.forEach(System.out::println);
- QueryWrapper是查詢條件構造器,like是一種條件建構式,還有很多的條件建構式,請參考:條件構造器

-
幾乎所有的條件建構式,都提供了condition引數實作動態SQL,也就是引數判斷是否回傳true,如果回傳false,該條件不成立,如
email=“”,所以.like(StringUtils.isNotEmpty(email), "email", email);的條件不成立, -
所以最終的執行SQL,如下(只有name LIKE條件,沒有email LIKE 條件):
SELECT id,name,age,email,create_time
FROM user
WHERE name LIKE %字母%
舉例二:allEq條件構造器
- all表示所有
- Eq是equal的縮寫表示相等關系
//構造條件
QueryWrapper<User> query = new QueryWrapper<>();
Map<String, Object> params = new HashMap<>();
params.put("name", "字母哥");
params.put("age", 18);
params.put("email", null);
// query.allEq(params,false);
query.allEq((k, v) -> !k.equals("name"), params, false);
List<User> list = userMapper.selectList(query);
list.forEach(System.out::println);
- 第一個引數是過濾器(可選引數),lambda運算式表示(k, v) -> !k.equals("name"),引數的Key不能是name,所以
params.put("name", "字母哥");這個查詢條件被過濾掉 - 第二個引數表示傳入所有的params查詢引數
- 第三個引數(可選引數),表示如果值為null是否按IS NULL查詢,false則忽略null列的查詢,所以
params.put("email", null);這個查詢條件被過濾掉
最終執行的SQL如下:
SELECT id,name,age,email,create_time
FROM user
WHERE age = ?
更多構造器使用方法總結
請參考:官方檔案:條件構造器

二、lambda條件構造器
舉例一:
// LambdaQueryWrapper<User> lambdaQ = new QueryWrapper<User>().lambda();
// LambdaQueryWrapper<User> lambdaQ = new LambdaQueryWrapper<>();
LambdaQueryWrapper<User> lambdaQ = Wrappers.lambdaQuery();
lambdaQ.like(User::getName, "字母")
.lt(User::getAge, 18);
List<User> list = userMapper.selectList(lambdaQ);
lambda條件構造器,最終執行SQL如下:
SELECT id,name,age,email,create_time
FROM user
WHERE name LIKE %字母%
AND age < 18
舉例二:
List<User> list = new LambdaQueryChainWrapper<User>(userMapper)
.likeRight(User::getName, "字母")
.and(q -> q.lt(User::getAge, 40)
.or()
.isNotNull(User::getEmail)
)
.list();
list.forEach(System.out::println);
lambda條件構造器,最終執行SQL如下:
SELECT id,name,age,email,create_time
FROM user
WHERE name LIKE '字母%'
AND ( age < 18 OR email IS NOT NULL )
歡迎關注我的博客,里面有很多精品合集
- 本文轉載注明出處(必須帶連接,不能只轉文字):字母哥博客,
覺得對您有幫助的話,幫我點贊、分享!您的支持是我不竭的創作動力! ,另外,筆者最近一段時間輸出了如下的精品內容,期待您的關注,
- 《手摸手教你學Spring Boot2.0》
- 《Spring Security-JWT-OAuth2一本通》
- 《實戰前后端分離RBAC權限管理系統》
- 《實戰SpringCloud微服務從青銅到王者》
- 《VUE深入淺出系列》
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/149772.html
標籤:Java
