4、條件構造器——AbstractWrapper

上一節咱們完成了基於mybatis-plus的CRUD操做,這一節咱們來學習一下使用mybatis-plus中的條件構造器——AbstractWrapper,咱們主要使用的是QueryWrapper來演示,其餘的你們本身能夠嘗試。java

首先咱們來介紹一下AbstractWrapper,下圖是AbstractWrapper的一個繼承結構:mysql

mp03-01.png

  1. Mybatis-Plus 經過 QueryWrapper( MP 封裝的一個查詢條件構造器,繼承自AbstractWrapperAbstractWrapper 實現了 Wrapper等接口) 來讓用戶自由的構建查詢條件,簡單便捷,沒有額外的負擔,可以有效提升開發效率
  2. 查詢包裝器QueryWrapper, 主要用於處理 sql 拼接,排序,實體參數查詢等
  3. 注意: 使用的是數據庫字段,不是 Java 屬性!
  4. 條件參數說明:
查詢方式 說明
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文件:git

<?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的演示:github

一、使用QueryWrapper的更新操做

/**
 * 條件構造器 更新操做
 */
@Test
public void testWrapperUpdate() {

    Employee employee = new Employee();
    employee.setLastName("XP");
    employee.setEmail("xp@github.com");
    employee.setGender(0);
    employeeMapper.update(employee,
            new QueryWrapper<Employee>()
                    .eq("age", 22)
                    .eq("last_name", "MP")
    );
}
複製代碼

二、使用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);
}
複製代碼

三、使用QueryWrapper的刪除操做

/**
 * 條件構造器 刪除操做
 */
@Test
public void testWrapperDelete() {
    employeeMapper.delete(
            new QueryWrapper<Employee>()
                    .eq("age", 22)
                    .eq("last_name", "MP")
    );
}
複製代碼

四、完整的測試代碼

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("xp@github.com");
        employee.setGender(0);
        employeeMapper.update(employee,
                new QueryWrapper<Employee>()
                        .eq("age", 22)
                        .eq("last_name", "MP")
        );
    }

    /**
     * 條件構造器 查詢操做
     */
    @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);
    }

}
複製代碼

完成上面的操做後,mp03的代碼結構以下所示:spring

mp03-02.png

至此,基於 mybatis-plus 的條件構造器——QueryWrapper演示就完成了,下面咱們就能夠進入到下一節ActiveRecord(活動記錄)了。sql

源代碼

相關示例完整代碼:mybatis-plus-in-action數據庫

相關文章
相關標籤/搜索