小書MybatisPlus第2篇-條件構造器的應用及總結

1、條件構造器Wrapper

Mybatis Plus爲咱們提供了以下的一些條件構造器,咱們能夠利用它們實現查詢條件、刪除條件、更新條件的構造。html

mybatis-plus-wrapper

條件構造器用於給以下的Mapper方法傳參,一般狀況下:vue

  • 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是一種條件構造函數,還有不少的條件構造函數。請參考:條件構造器

mybatis-plus-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以下:spring

SELECT id,name,age,email,create_time 
FROM user 
WHERE age = ?

更多構造器使用方法總結

請參考:官方文檔:條件構造器後端

mybatis-plus-wrapper-use

2、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以下:springboot

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以下:mybatis

SELECT id,name,age,email,create_time 
FROM user 
WHERE name LIKE '字母%'
AND ( age < 18 OR email IS NOT NULL )

歡迎關注個人博客,裏面有不少精品合集

  • 本文轉載註明出處(必須帶鏈接,不能只轉文字):字母哥博客

以爲對您有幫助的話,幫我點贊、分享!您的支持是我不竭的創做動力! 。另外,筆者最近一段時間輸出了以下的精品內容,期待您的關注。app

相關文章
相關標籤/搜索