1. 程式人生 > 程式設計 >Mybatis-Plus條件構造器的具體使用方法

Mybatis-Plus條件構造器的具體使用方法

在Mybatis-Plus中,Wrapper介面的實現類關係如下:

Mybatis-Plus條件構造器的具體使用方法

可以看到,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

例2: allEq({id:1,age:null},false) —> id = 1 and name = ‘老王'

  • 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

例2: allEq((k,false) —> name = ‘老王'

測試用例

@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條件構造器內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!