1. 程式人生 > 實用技巧 >使用MyBatis-tk和pagehelper

使用MyBatis-tk和pagehelper

在 spring-boot 整合 MyBatis小節 中,我們介紹瞭如何在 spring-boot 中整合 MyBatis,MyBatis 雖然靈活,但是對於業務開發還略顯不夠。tk.mapper 和 pagehelper 是國內開發者為 MyBatis 定製的兩款業務增強庫,tk.mapper 可以讓開發者從基本的增刪查改中解放,pagehelper 則提供了高度易用的分頁功能。

有了它們,MyBatis 可謂是如虎添翼,本小節我們將介紹這兩款庫的使用。

2. tk.mapper

2.1 簡介

在 tk.mapper 專案的首頁有關於它最精確的介紹。

通用 mapper 是一個可以實現任意 MyBatis 通用方法的框架,專案提供了常規的增刪改查操作以及 example相關的單表操作。通用 mapper 是為了解決 MyBatis 使用中 90%的基本操作,使用它可以很方便的進行開發,可以節省開發人員大量的時間。總結來說,tk.mapper 可以為 MyBatis 開發節省大量的時間,精簡的 90% 的基本操作。

2.2 依賴

tk.mapper 的使用也十分簡單,我們只需引入相應的 starter 即可。如下:

<dependency>
  <groupId>tk.mybatis</groupId>
  <artifactId>mapper-spring-boot-starter</artifactId>
  <version>2.1.5</version>
</dependency>
注意,引入了 mapper starter 後,雖然和 MyBatis 官方的 starter 沒有衝突,但是官方的自動配置不會生效!

2.3 使用

簡單地說,tk.mapper 會給普通的 mapper 做一些增強,讓 mapper 具有基本的增刪查改的能力。如下:

import tk.mybatis.mapper.common.BaseMapper;

@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {
  @Select("SELECT * FROM imooc_user")
  List<User> getUsers();
}

UserMapper 是原有的 mapper,只需繼承 tk.mapper 中的 BaseMapper 就完成的增強。

UserMapper 繼承 BaseMapper 後就擁有了基礎的增刪查改功能,而無需寫 SQL。BaseMapper 必須指定一個與 UserMapper 對應的模型類,即 User 類。

package com.imooc.mybatis.springbootmybatisexample.model;

import javax.persistence.Table;
import java.io.Serializable;

@Table(name = "imooc_user")
public class User implements Serializable {
  private Long id;
  private String username;
  private Integer age;
  private Integer score;
  // 省略 getter 和 setter 方法
}

資料表的名稱為 imooc_user,這裡我們通過 Table 註解來告訴 tk User 模型所對應的資料表。

mapper 增強後,我們還需要給 SpringbootMybatisExampleApplication 啟動類新增上一個註解:

import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication
@MapperScan("com.imooc.mybatis.springbootmybatisexample.mapper")
public class SpringbootMybatisExampleApplication {
  public static void main(String[] args) {
    SpringApplication.run(SpringbootMybatisExampleApplication.class, args);
  }
}

MapperScan 是 tk 提供的一個 mapper 掃描註解,在註解中我們需要填入 mapper 所在的包路徑,即 com.imooc.mybatis.springbootmybatisexample.mapper。

到此 UserMapper 增強已經完成了,我們嘗試在 UserController 中使用。

@RestController
@RequestMapping("/user")
public class UserController {
  @Autowired
  private UserMapper userMapper;

  @GetMapping
  public List<User> getUsers() {
    // return userMapper.getUsers();
    return userMapper.selectAll();
  }
}

在這裡,我們替換 getUsers 方法,而是使用了 selectAll 方法,selectAll 是 BaseMapper 提供的方法,也就是增強的方法,我們無需去為這個方法新增相應的 SQL,tk 會自動幫我們搭理好一切。

再次執行程式,並測試介面:

# curl 127.0.0.1:8080/user/
[{"id":1,"username":"peter","age":18,"score":100},{"id":2,"username":"pedro","age":24,"score":200},{"id":3,"username":"jerry","age":28,"score":500},{"id":4,"username":"mike","age":12,"score":300}]

我們得到了與之前一樣的結果,可以看到在我們並未書寫任何 SQL 的前提下, tk.mapper 自動幫我們生成了需要的 SQL 查詢,這就是 tk.mapper 所帶來的簡化開發能力。

3. pagehelper

3.1 簡介

pagehelper 是一個 方便好用的 MyBatis 分頁外掛,支援複雜的單表、多表分頁,是目前 MyBatis 中使用最為廣泛的外掛之一。

3.2 依賴

和其它一樣,pagehelper 也只需匯入相應的啟動器即可。

<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper-spring-boot-starter</artifactId>
  <version>1.2.13</version>
</dependency>

3.3 使用

pagehelper 充分的簡單易用,在 UserController 中只需新增一行程式碼即可。

import com.github.pagehelper.PageHelper;

@RestController
@RequestMapping("/user")
public class UserController {
  @Autowired
  private UserMapper userMapper;

  @GetMapping
  public List<User> getUsers() {
    PageHelper.startPage(1, 2);
    return userMapper.selectAll();
  }
}

PageHelper.startPage(1, 2)會自動攔截後面將要執行的 SQL,然後處理該 SQL 並新增分頁引數。startPage 接收兩個引數,第一個引數表示當前分頁,第二個引數表示分頁數目,如這裡的 1,2 表示第一頁且該頁最多有兩條記錄。

執行程式,並測試介面:

# curl 127.0.0.1:8080/user/
[{"id":1,"username":"peter","age":18,"score":100},{"id":2,"username":"pedro","age":24,"score":200}]

與上面的結果相比,結果的數目只有兩條,顯然分頁外掛已經生效。

提示,pagehelper 的分頁是從1開始的,而有些分頁外掛分頁是從0開始的。