mybatis plus 快速入門
- 環境搭建
- 一、基本的crud
-
- 查詢所有
- 按照條件查詢
-
- 1)根據id查詢,查詢一個
- 2)根據id查詢,查詢多個
- 插入
-
- 1)簡單的插入資料
- 插入過程分析
- 1)插入之前是沒有id的,插入之後就有id了
- 2)id的生成政策
- 修改
- 删除
-
- 需要增加一個字段 deleted,配上對應的注解
- 增加 yml 配置
- 二、分頁操作
- 三、自動填充功能
環境搭建
導入mybatis plus 依賴,注意,導入mybatis plus依賴之後,就不要再導入mybatis 的依賴,可能會有依賴沖突
建 spring boot 工程
導入依賴
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
一、基本的crud
1)寫對應的實體類
User
2)mapper接口,繼承一個父類即可
3)繼承父類之後,就可以直接調用服類的方法
查詢所有
按照條件查詢
1)根據id查詢,查詢一個
2)根據id查詢,查詢多個
3)根據某個條件或幾個條件查詢,查詢
插入
1)簡單的插入資料
插入過程分析
1)插入之前是沒有id的,插入之後就有id了
2)id的生成政策
預設是 雪花算法,可以保證id 是全局唯一的,并且和UUID不同,雪花算法的id是數字,數字可以是有序的
可以通過注解的方式,控制主鍵的正常政策
有如下幾種生成政策,預設是 ID_WORKER
- AUTO 自增的方式
- NONE 沒有主鍵
- INPUT 每次插入需要帶上主鍵,不會自動生成
- ID_WORKER 雪花算法,生成的主鍵是Long 類型的資料
- UUID通過UUID·的方式 ID_WORKER_STR ID_WORKER的字元串表示,生成的主鍵是String 類型的資料
修改
修改,需要傳入一個對象
修改的時候,可以應用樂觀鎖的機制
加一個 version 字段
給配置類增加一個 bean
/**
* 樂觀鎖插件 針對字段 version
* @return
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
修改 id 為 4 的name
修改之後,version 值變成了1
以上測試的是正常的情況
下面模拟高并發的情況
下面的執行結果說明
user.setName("updateName222222");
userMapper.updateById(user);
這兩句是執行成功的
最終的結果
删除
邏輯删除
需要增加一個字段 deleted,配上對應的注解
增加 yml 配置
上面對的配置 表示 邏輯删除之後,deleted 字段變成 1;沒有删除之前,deleted 字段的值是 0
(可以設定 deleted 字段的預設值就是 0)
低版本的mybatis plus 邏輯删除需要給配置類一個 bean
/**
* 邏輯删除 針對字段 deleted
* @return
*/
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
删除之前的資料
删除之後的資料
注意:
筆者一開始用的 插件的版本是 3.0.5
在做邏輯删除的時候,需要在 配置類裡面加上面的 bean
換了最新的版本(3.3.2)之後,隻需要加上注解即可,不需要 在配置類裡面添加攔截器的配置也是可以正常的邏輯删除的
二、分頁操作
增加一個配置bean
測試代碼
三、自動填充功能
場景:阿裡開發規定,每張表 需要有 建立時間字段和修改時間字段,這兩個字段基本上是自動的填充
1)通過資料庫設定字段預設值的方式
dateTime CURRENT_TIMESTAMP
2)通過代碼填充的方式
3)通過插入和修改時,帶上字段 ,并設定時間
在mybatis 的xml 中
NOW()函數以`'YYYY-MM-DD HH:MM:SS’傳回目前的日期時間,可以直接存到DATETIME字段中。
CURDATE()以’YYYY-MM-DD’的格式傳回今天的日期,可以直接存到DATE字段中。
CURTIME()以’HH:MM:SS’的格式傳回目前的時間,可以直接存到TIME字段中。
4)mybatis plus 可以自動的填充
以上注解的含義如下
FieldFill 可以有 4 個值
INSERT 表示 該字段在插入的時候,填充
UPDATE 表示 該字段在修改的時候,填充
INSERT_UPDATE 表示 該字段在修改的時候,填充;在插入的時候,也填充
是以,上面實體類的配置的含義是
createTime 是在記錄産生的時候填充,填充的是 插入記錄的時間,吻合需求
updateTime 在插入記錄的時候,也填充插入記錄時間,就是給了一個預設的初始值,在記錄被修改的時候,updateTime 會更新成修改記錄的時間