1. 程式人生 > >mybatis-plus實現單表的crud 以及分頁

mybatis-plus實現單表的crud 以及分頁

假設我們已存在一張 User 表,且已有對應的實體類 User,實現 User 表的 CRUD 操作我們需要做什麼呢?

/** User 對應的 Mapper 介面 */
public interface UserMapper extends BaseMapper<User> { }

以上就是您所需的所有操作,甚至不需要您建立XML檔案,我們如何使用它呢?

基本CRUD

// 初始化 影響行數
int result = 0;
// 初始化 User 物件
User user = new User();

// 插入 User (插入成功會自動回寫主鍵到實體類)
user.setName("Tom");
result =
userMapper.insert(user); // 更新 User user.setAge(18); result = userMapper.updateById(user); // 查詢 User User exampleUser = userMapper.selectById(user.getId()); // 查詢姓名為‘張三’的所有使用者記錄 List<User> userList = userMapper.selectList( new EntityWrapper<User>().eq("name", "張三") ); // 刪除 User result =
userMapper.deleteById(user.getId());

以上是基本的 CRUD 操作,當然我們可用的 API 遠不止這幾個,我們提供了多達 17 個方法給大家使用,可以極其方便的實現單一、批量、分頁等操作,接下來我們就來看看 MP 是如何使用分頁的。

分頁操作

// 分頁查詢 10 條姓名為‘張三’的使用者記錄
List<User> userList = userMapper.selectPage(
        new Page<User>(1, 10),
        new EntityWrapper<User>().eq("name", "張三"
) );

如您所見,我們僅僅需要繼承一個 BaseMapper 即可實現大部分單表 CRUD 操作,極大的減少的開發負擔。

有人也許會質疑:這難道不是通用 Mapper 麼?別急,咱們接著往下看。

現有一個需求,我們需要分頁查詢 User 表中,年齡在18~50之間性別為男且姓名為張三的所有使用者,這時候我們該如何實現上述需求呢?

傳統做法是 Mapper 中定義一個方法,然後在 Mapper 對應的 XML 中填寫對應的 SELECT 語句,且我們還要整合分頁,實現以上一個簡單的需求,往往需要我們做很多重複單調的工作,普通的通用 Mapper 能夠解決這類痛點麼?

用 MP 的方式開啟以上需求

// 分頁查詢 10 條姓名為‘張三’、性別為男,且年齡在18至50之間的使用者記錄
List<User> userList = userMapper.selectPage(
        new Page<User>(1, 10),
        new EntityWrapper<User>().eq("name", "張三")
                .eq("sex", 0)
                .between("age", "18", "50")
);

以上操作,等價於

SELECT *
FROM sys_user
WHERE (name='張三' AND sex=0 AND age BETWEEN '18' AND '50')
LIMIT 0,10

Mybatis-Plus 通過 EntityWrapper(簡稱 EW,MP 封裝的一個查詢條件構造器)或者 Condition(與EW類似) 來讓使用者自由的構建查詢條件,簡單便捷,沒有額外的負擔,能夠有效提高開發效率。

ActiveRecord 一直廣受動態語言( PHP 、 Ruby 等)的喜愛,而 Java 作為準靜態語言,對於 ActiveRecord 往往只能感嘆其優雅,所以我們也在 AR 道路上進行了一定的探索,喜歡大家能夠喜歡,也同時歡迎大家反饋意見與建議。

我們如何使用 AR 模式?

@TableName("sys_user") // 註解指定表名
public class User extends Model<User> {

  ... // fields

  ... // getter and setter

  /** 指定主鍵 */
  @Override
  protected Serializable pkVal() {
      return this.id;
  }
}

我們僅僅需要繼承 Model 類且實現主鍵指定方法 即可讓實體開啟 AR 之旅,開啟 AR 之路後,我們如何使用它呢?

基本CRUD

// 初始化 成功標識
boolean result = false;
// 初始化 User
User user = new User();

// 儲存 User
user.setName("Tom");
result = user.insert();

// 更新 User
user.setAge(18);
result = user.updateById();

// 查詢 User
User exampleUser = t1.selectById();

// 查詢姓名為‘張三’的所有使用者記錄
List<User> userList1 = user.selectList(
        new EntityWrapper<User>().eq("name", "張三")
);

// 刪除 User
result = t2.deleteById();

分頁操作

// 分頁查詢 10 條姓名為‘張三’的使用者記錄
List<User> userList = user.selectPage(
        new Page<User>(1, 10),
        new EntityWrapper<User>().eq("name", "張三")
).getRecords();

複雜操作

// 分頁查詢 10 條姓名為‘張三’、性別為男,且年齡在18至50之間的使用者記錄
List<User> userList = user.selectPage(
        new Page<User>(1, 10),
        new EntityWrapper<User>().eq("name", "張三")
                .eq("sex", 0)
                .between("age", "18", "50")
).getRecords();

AR 模式提供了一種更加便捷的方式實現 CRUD 操作,其本質還是呼叫的 Mybatis 對應的方法,類似於語法糖。

通過以上兩個簡單示例,我們簡單領略了 Mybatis-Plus 的魅力高效率值得注意的一點是:我們提供了強大的程式碼生成器,可以快速生成各類程式碼,真正的做到了即開即用