Mybatis-plus學習(五)——MybatiPlus的自定義ID生成器和邏輯刪除詳解測試
5.自定義ID生成器
自mybatis-plus3.3.0開始,預設使用雪花演算法+UUID(不含中劃線)
5.1雪花演算法
snowflake是Twitter開源的分散式ID生成演算法,結果是一個long型的ID。其核心思想是:使用41bit作為
毫秒數,10bit作為機器的ID(5個bit是資料中心,5個bit的機器ID),12bit作為毫秒內的流水號(意味
著每個節點在每毫秒可以產生 4096 個 ID),最後還有一個符號位,永遠是0。可以保證幾乎全球唯一!
5.2配置主鍵自增
5.3在資料庫中配置主鍵自增
5.4IdType的型別
AUTO(0), // 資料庫id自增
NONE(1), // 未設定主鍵
INPUT(2), // 手動輸入
ID_WORKER(3), // 預設的全域性唯一id
UUID(4), // 全域性唯一id uuid
ID_WORKER_STR(5); //ID_WORKER 字串表示法
5.5使用自定義的生成主鍵
方式一:宣告為Bean供Spring掃描注入
@Component
public class CustomIdGenerator implements IdentifierGenerator {
@Override
public Long nextId(Object entity) {
//可以將當前傳入的class全類名來作為bizKey,或者提取引數來生成bizKey進行分散式Id呼叫生成.
String bizKey = entity.getClass().getName();
//根據bizKey呼叫分散式ID生成
long id = ....;
//返回生成的id值即可.
return id;
}
}
方式二:使用配置類
@Bean
public IdentifierGenerator idGenerator() {
return new CustomIdGenerator();
}
方式三:通過MybatisPlusPropertiesCustomizer自定義
@Bean
public MybatisPlusPropertiesCustomizer plusPropertiesCustomizer() {
return plusProperties -> plusProperties.getGlobalConfig().setIdentifierGenerator(new CustomIdGenerator());
}
6.邏輯刪除
說明:
只對自動注入的sql起效:
- 插入: 不作限制
- 查詢: 追加where條件過濾掉已刪除資料,且使用 wrapper.entity 生成的where條件會忽略該欄位
- 更新: 追加where條件防止更新到已刪除資料,且使用 wrapper.entity 生成的where條件會忽略該欄位
- 刪除: 轉變為 更新
例如:
- 刪除:
update user set deleted=1 where id = 1 and deleted=0
- 查詢:
select id,name,deleted from user where deleted=0
欄位型別支援說明:
- 支援所有資料型別(推薦使用
Integer
,Boolean
,LocalDateTime
) - 如果資料庫欄位使用
datetime
,邏輯未刪除值和已刪除值支援配置為字串null
,另一個值支援配置為函式來獲取值如now()
附錄:
- 邏輯刪除是為了方便資料恢復和保護資料本身價值等等的一種方案,但實際就是刪除。
- 如果你需要頻繁查出來看就不應使用邏輯刪除,而是以一個狀態去表示。
6.1使用方法:
6.2.1步驟1:
配置com.baomidou.mybatisplus.core.config.GlobalConfig$DbConfig
- 例: application.yml
mybatis-plus:
global-config:
db-config:
logic-delete-field: flag # 全域性邏輯刪除的實體欄位名(since 3.3.0,配置後可以忽略不配置步驟2)
logic-delete-value: 1 # 邏輯已刪除值(預設為 1)
logic-not-delete-value: 0 # 邏輯未刪除值(預設為 0)
或者 application.properties中
# 全域性邏輯刪除的實體欄位名(since 3.3.0,配置後可以忽略不配置步驟2)
mybatis-plus.global-config.db-config.logic-delete-field=deleted
# 邏輯已刪除值(預設為 1)
mybatis-plus.global-config.db-config.logic-delete-value=1
# 邏輯未刪除值(預設為 0)
mybatis-plus.global-config.db-config.logic-not-delete-value=0
6.2.2步驟2:
實體類欄位上加上@TableLogic
註解
@TableLogic
private Integer deleted;
6.3在springboot中使用
6.3.1在資料庫中增加欄位 deleted
6.3.2在實體類中新增註釋
6.3.3在application.properties中新增配置
server.port=8080
#資料庫連線的使用者名稱
spring.datasource.username=root
#資料庫連線的密碼
spring.datasource.password=root
#資料庫連線的URL
spring.datasource.url=jdbc:mysql://localhost:3306/javaweb?serverTimezone=UTC
#資料庫連線的驅動 MySQL8使用com.mysql.cj.jdbc.Driver ,mysql5使用com.mysql.jdbc.Driver
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#配置日誌
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# 全域性邏輯刪除的實體欄位名(since 3.3.0,配置後可以忽略不配置步驟2)
mybatis-plus.global-config.db-config.logic-delete-field=deleted
# 邏輯已刪除值(預設為 1)
mybatis-plus.global-config.db-config.logic-delete-value=1
# 邏輯未刪除值(預設為 0)
mybatis-plus.global-config.db-config.logic-not-delete-value=0
6.3.4測試
@Test
public void testGetOneById(){
Account byId = accountService.getById(1);
System.out.println(byId);
}
可見我們在進行刪除時mybatisplus會自動新增條件轉換為更新語句。
7.測試的原始碼已上傳到GitHub中:https://github.com/LJF2402901363/java_study.git
8.本部落格已經同步到個人部落格,如有需要請移步:http://moyisuiying.com/index.php/mybatis/411.html
相關文章
- 【mybatis-plus】分頁、邏輯刪除MyBatis
- MyBatis-Plus之邏輯刪除的實現MyBatis
- Mybatis-plus學習(四)——MybatiPlus的Wrapper的使用MyBatisAPP
- MybatisPlus - [05] 邏輯刪除MyBatis
- 透過mybatis-plus的自定義攔截器實現控制 mybatis-plus的全域性邏輯刪除欄位的控制 (修改其最終執行的sql中的where條件)MyBatisSQL
- JUnit5學習之五:標籤(Tag)和自定義註解
- MyBatisPlus解決邏輯刪除與唯一索引的相容問題MyBatis索引
- OpenAPI自定義生成器詳細教程API
- BSP和JSP裡的UI元素ID生成邏輯JSUI
- 刪除 IntelliJ Idea 中自定義的 Maven ArchetypeIntelliJIdeaMaven
- 在LVM中恢復已刪除的邏輯卷LVM
- 物聯網學習教程——邏輯運算子和邏輯表示式
- Python 中 sorted 如何自定義比較邏輯Python
- laravel model自定義軟刪除欄位Laravel
- 整合測試不是測試業務邏輯
- Python學習之錯誤除錯和測試Python除錯
- 軟體測試的底層邏輯
- MyBatis-Plus Generator自定義模板MyBatis
- 業務邏輯學習!
- 測試筆試邏輯思維題筆試
- 【WPF】自定義一個自刪除的多功能ListBox
- win10如何刪除自定義的背景圖片 win10刪除背景自定義圖片歷史記錄的步驟Win10
- 異常-自定義異常的實現和測試
- [非專業翻譯] Mapster - 自定義對映邏輯
- Golang 單元測試 - 邏輯層Golang
- 刪除重複id的記錄
- SAP BSP和JSP頁面裡UI元素的ID生成邏輯JSUI
- 如何給 SAP ABAP ALV 報表的修改功能新增自定義校驗邏輯試讀版
- MySQL使用之五_自定義函式和自定義過程MySql函式
- elasticsearch之使用正規表示式自定義分詞邏輯Elasticsearch分詞
- HBase學習之Hbase的邏輯結構和物理結構
- Python學習-比較運算子和邏輯運算子Python
- spring boot學習(2): SpringApplication和自定義bannerSpring BootAPP
- Spring boot+Mybatisplus用AR模式實現邏輯刪除操作Spring BootMyBatis模式
- 軟體測試學習 ——五種軟體測試模型模型
- Mybatis-plus核心功能-自定義SQLMyBatisSQL
- 軟體測試學習資源—登陸、新增、刪除、查詢模組測試用例設計
- LightDB-Oracle和LightDB邏輯備份測試對比(十二)Oracle