MybatisPlus學習筆記5:條件構造器(EntityWrapper)


以上基本的 CRUD 操作,我們僅僅需要繼承一個 BaseMapper 即可實現大部分單表 CRUD 操作。
BaseMapper 提供了多達 17 個方法供使用, 可以極其方便的實現單一、批量、分頁等操作,極大的減少開發負擔。
但是mybatis-plus的強大不限於此,請看如下需求該如何處理:
需求:
我們需要分頁查詢 tb_employee 表中,年齡在 18~50 之間性別為男且姓名為 xx 的所有用戶,這時候我們該如何實現上述需求呢?
使用MyBatis : 需要在 SQL 映射文件中編寫帶條件查詢的 SQL,並用PageHelper 插件完成分頁. 實現以上一個簡單的需求,往往需要我們做很多重復單調的工作。
使用MP: 依舊不用編寫 SQL 語句,MP 提供了功能強大的條件構造器 ------ EntityWrapper。

接下來就直接看幾個案例體會EntityWrapper的使用。

1、分頁查詢年齡在18 - 50且gender為0、姓名為tom的用戶:

List<Employee> employees = emplopyeeDao.selectPage(new Page<Employee>(1,3),
     new EntityWrapper<Employee>()
        .between("age",18,50)
        .eq("gender",0)
        .eq("last_name","tom")
);

由此案例可知,分頁查詢和之前一樣,new 一個page對象傳入分頁信息即可。
至於分頁條件,new 一個EntityWrapper對象,調用該對象的相關方法即可。
between方法三個參數,分別是column、value1、value2,該方法表示column的值要在value1和value2之間;
eq是equals的簡寫,該方法兩個參數,column和value,表示column的值和value要相等。
注意column是數據表對應的字段,而非實體類屬性字段。

2、查詢gender為0且名字中帶有老師、或者郵箱中帶有a的用戶:

		// 查詢tbl_employee表中, 性別為女並且名字中帶有"老師" 或者  郵箱中帶有"a"
		
		List<Employee> emps = employeeMapper.selectList(
				new EntityWrapper<Employee>()
				.eq("gender", 0)
				.like("last_name", "老師")
				//.or()    // SQL: (gender = ? AND last_name LIKE ? OR email LIKE ?)    
				.orNew()   // SQL: (gender = ? AND last_name LIKE ?) OR (email LIKE ?) 
				.like("email", "a")
				);
		System.out.println(emps);

未說分頁查詢,所以用selectList即可,
用EntityWrapper的like方法進行模糊查詢,
like方法就是指column的值包含value值,此處like方法就是查詢last_name中包含“老師”字樣的記錄;
“或者”用or或者orNew方法表示,這兩個方法區別不大,用哪個都可以,可以通過控制台的sql語句自行感受其區別。

3、查詢gender為0,根據age排序,簡單分頁:

	// 查詢性別為女的, 根據age進行排序(asc/desc), 簡單分頁
		
List<Employee> emps  = employeeMapper.selectList(
		new EntityWrapper<Employee>()
		.eq("gender", 0)
		.orderBy("age")
		//.orderDesc(Arrays.asList(new String [] {"age"}))
		.last("desc limit 1,3")
		);
System.out.println(emps);
		

簡單分頁是指不用page對象進行分頁。
orderBy方法就是根據傳入的column進行升序排序,若要降序,可以使用orderByDesc方法,也可以如案例中所示用last方法;
last方法就是將last方法里面的value值追加到sql語句的后面,在該案例中,
最后的sql語句就變為select ······ order by desc limit 1, 3,追加了desc limit 1,3所以可以進行降序排序和分頁。

4、分頁查詢年齡在18 - 50且gender為0、姓名為tom的用戶:

List<Employee > emps = employeeMapper.selectPage(
						new Page<Employee>(1,2), 
						Condition.create()
						.between("age", 18, 50)
						.eq("gender", "1")
						.eq("last_name", "Tom")
							
						);
		
System.out.println(emps);	

Condition和EntityWrapper的區別就是,創建條件構造器時,EntityWrapper是new出來的,而Condition是調create方法創建出來。

5、根據條件更新:

/**
	 * 條件構造器  修改操作
	 */
@Test
public void testEntityWrapperUpdate() {
		
	Employee employee = new Employee();
	employee.setLastName("蒼老師");
	employee.setEmail("cls@sina.com");
	employee.setGender(0);
		
		
	employeeMapper.update(employee, 
				new EntityWrapper<Employee>()
				.eq("last_name", "Tom")
				.eq("age", 44)
				);
	}

6、根據條件刪除:

/**
* 條件構造器  刪除操作
*/
@Test
public void testEntityWrapperDelete() {
		
	employeeMapper.delete(
				new EntityWrapper<Employee>()
				.eq("last_name", "Tom")
				.eq("age", 22)
				);
	}
	


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM