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
- 【AIX 命令學習】刪除邏輯卷rmlv 命令!AI
- GridView 自定義模版自定義修改,刪除,分頁View
- 透過mybatis-plus的自定義攔截器實現控制 mybatis-plus的全域性邏輯刪除欄位的控制 (修改其最終執行的sql中的where條件)MyBatisSQL
- MybatisPlus - [05] 邏輯刪除MyBatis
- android 滑動刪除的listview(自定義view)AndroidView
- JUnit5學習之五:標籤(Tag)和自定義註解
- 刪除 IntelliJ Idea 中自定義的 Maven ArchetypeIntelliJIdeaMaven
- Android自定義view詳解AndroidView
- Android 自定義 view 詳解AndroidView
- django 自定義登入驗證邏輯Django
- OpenAPI自定義生成器詳細教程API
- 業務邏輯學習!
- 物聯網學習教程——邏輯運算子和邏輯表示式
- 自定義註解初步學習
- 在 CloudIDE 裡實現天貓精靈自定義技能的業務邏輯CloudIDE
- Oracle邏輯讀詳解Oracle
- 測試筆試邏輯思維題筆試
- MyBatisPlus解決邏輯刪除與唯一索引的相容問題MyBatis索引
- 軟體測試的底層邏輯
- linux軟RAID配置、測試、刪除LinuxAI
- Android自定義ViewGroup之子控制元件的自動換行和新增刪除AndroidView控制元件
- MyBatis-Plus Generator自定義模板MyBatis
- 【朝花夕拾】Android自定義View篇之(五)Android事件分發機制(上)三個重要方法的處理邏輯AndroidView事件
- Golang 單元測試 - 邏輯層Golang
- Linux LVM邏輯卷配置過程詳解(建立,增加,減少,刪除,解除安裝)LinuxLVM
- Python學習之錯誤除錯和測試Python除錯
- Python 中 sorted 如何自定義比較邏輯Python
- Oracle刪除效率測試Oracle
- laravel model自定義軟刪除欄位Laravel
- 自定義RecyclerView實現側滑刪除View
- Javascript自定義陣列刪除方法remove()JavaScript陣列REM
- Linux Shell 邏輯運算子、邏輯表示式詳解Linux
- 在LVM中恢復已刪除的邏輯卷LVM
- 異常-自定義異常的實現和測試