【MyBatis-Plus-In-Action】四、條件構造器——AbstractWrapper
阿新 • • 發佈:2019-12-31
上一節我們完成了基於mybatis-plus
的CRUD操作,這一節我們來學習一下使用mybatis-plus
中的條件構造器——AbstractWrapper
,我們主要使用的是QueryWrapper
來演示,其他的大家自己可以嘗試。
首先我們來介紹一下AbstractWrapper
,下圖是AbstractWrapper
的一個繼承結構:
-
Mybatis-Plus
通過QueryWrapper
( MP 封裝的一個查詢條件構造器,繼承自AbstractWrapper
,AbstractWrapper
實現了Wrapper
等介面) 來讓使用者自由的構建查詢條件,簡單便捷,沒有額外的負擔,能夠有效提高開發效率 - 查詢包裝器
QueryWrapper
, 主要用於處理 sql 拼接,排序,實體引數查詢等 - 注意: 使用的是資料庫欄位,不是 Java 屬性!
- 條件引數說明:
查詢方式 | 說明 |
---|---|
or | 或條件語句 |
and | 且條件語句 |
like | 模糊查詢 like |
notLike | 模糊查詢 not Like |
exists | exists 條件語句 |
notExists | not Exists 條件語句 |
isNull | null 值查詢 |
isNotNull | is Not Null 查詢 |
in | in 查詢 |
notIn | not in 查詢 |
groupBy | 分組查詢 |
orderBy | 排序查詢 |
having | 分組後篩選 |
eq | 等於 = |
ne | 不等於 <> |
between | between 條件語句 |
··· | ··· |
首先按照快速開始——Spring整合Mybatis-Plus
一節的操作,新建一個mp03
的 Module
,可以將mp02
中的內容全部複製過來,刪除TestMp.class
的內容,以便我們使用條件構造器,在此之前我們先修改一下修改mp03的pom.xml
檔案:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>mybatis-plus-in-action</artifactId>
<groupId>com.demo.mybatis-plus</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mp03</artifactId>
<dependencies>
<!-- mp 依賴
mybatis-plus 會自動維護mybatis 以及 mybatis-spring相關的依賴
Mybatis 及 Mybatis-Spring 依賴請勿加入專案配置,以免引起版本衝突!!!Mybatis-Plus 會自動幫你維護!
-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<!--junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<!-- log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!--lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
複製程式碼
下面開始我們的QueryWrapper的演示:
1、使用QueryWrapper的更新操作
/**
* 條件構造器 更新操作
*/
@Test
public void testWrapperUpdate() {
Employee employee = new Employee();
employee.setLastName("XP");
employee.setEmail("[email protected]");
employee.setGender(0);
employeeMapper.update(employee,new QueryWrapper<Employee>()
.eq("age",22)
.eq("last_name","MP")
);
}
複製程式碼
2、使用QueryWrapper的查詢操作
/**
* 條件構造器 查詢操作
*/
@Test
public void testWrapperSelect() {
// 分頁查詢 tbl_employee 表中,年齡在 18~50 之間性別為男且
// 姓名為 xx 的所有使用者
IPage<Employee> page = employeeMapper.selectPage(new Page<Employee>(1,3),new QueryWrapper<Employee>()
.between("age",18,50)
.eq("gender",1)
.eq("last_name","MP")
);
System.out.println(page.getRecords());
// 查詢 tbl_employee 表中,名字中帶有M 性別為女 或者郵箱中帶有a的
List<Employee> employees = employeeMapper.selectList(
new QueryWrapper<Employee>()
.eq("gender",0)
.like("last_name","M")
.or() // SQL:(gender = ? AND last_name LIKE ? OR email LIKE ?)
.like("email","a")
);
System.out.println(employees);
// 帶排序的查詢
List<Employee> list = employeeMapper.selectList(
new QueryWrapper<Employee>()
.eq("gender",1)
// .orderBy(true,true,"age")
.orderByDesc("age")
);
System.out.println(list);
}
複製程式碼
3、使用QueryWrapper的刪除操作
/**
* 條件構造器 刪除操作
*/
@Test
public void testWrapperDelete() {
employeeMapper.delete(
new QueryWrapper<Employee>()
.eq("age","MP")
);
}
複製程式碼
4、完整的測試程式碼
public class TestMp {
private ApplicationContext ioc = new
ClassPathXmlApplicationContext("applicationContext.xml");
private EmployeeMapper employeeMapper = ioc.getBean("employeeMapper",EmployeeMapper.class);
/**
* 條件構造器 刪除操作
*/
@Test
public void testWrapperDelete() {
employeeMapper.delete(
new QueryWrapper<Employee>()
.eq("age",22)
.eq("last_name","MP")
);
}
/**
* 條件構造器 更新操作
*/
@Test
public void testWrapperUpdate() {
Employee employee = new Employee();
employee.setLastName("XP");
employee.setEmail("[email protected]");
employee.setGender(0);
employeeMapper.update(employee,new QueryWrapper<Employee>()
.eq("age","MP")
);
}
/**
* 條件構造器 查詢操作
*/
@Test
public void testWrapperSelect() {
// 分頁查詢 tbl_employee 表中,年齡在 18~50 之間性別為男且
// 姓名為 xx 的所有使用者
IPage<Employee> page = employeeMapper.selectPage(new Page<Employee>(1,new QueryWrapper<Employee>()
.between("age",50)
.eq("gender",1)
.eq("last_name","MP")
);
System.out.println(page.getRecords());
// 查詢 tbl_employee 表中,名字中帶有M 性別為女 或者郵箱中帶有a的
List<Employee> employees = employeeMapper.selectList(
new QueryWrapper<Employee>()
.eq("gender",0)
.like("last_name","M")
.or() // SQL:(gender = ? AND last_name LIKE ? OR email LIKE ?)
.like("email","a")
);
System.out.println(employees);
// 帶排序的查詢
List<Employee> list = employeeMapper.selectList(
new QueryWrapper<Employee>()
.eq("gender","age")
.orderByDesc("age")
);
System.out.println(list);
}
}
複製程式碼
完成上面的操作後,mp03的程式碼結構如下所示:
至此,基於 mybatis-plus
的條件構造器——QueryWrapper演示就完成了,下面我們就可以進入到下一節ActiveRecord(活動記錄)
了。
原始碼
相關示例完整程式碼:mybatis-plus-in-action