1. 程式人生 > 程式設計 >【MyBatis-Plus-In-Action】四、條件構造器——AbstractWrapper

【MyBatis-Plus-In-Action】四、條件構造器——AbstractWrapper

上一節我們完成了基於mybatis-plus的CRUD操作,這一節我們來學習一下使用mybatis-plus中的條件構造器——AbstractWrapper,我們主要使用的是QueryWrapper來演示,其他的大家自己可以嘗試。

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

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檔案:

<?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的程式碼結構如下所示:

mp03-02.png

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

原始碼

相關示例完整程式碼:mybatis-plus-in-action