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 的魅力與高效率,值得注意的一點是:我們提供了強大的程式碼生成器
,可以快速生成各類程式碼,真正的做到了即開即用
。