1.常用主鍵生成策略
Mybatis-Plus:常用的主鍵增長策略:1.默認IdType.ID_WORKER--基於雪花算法實現的用戶唯一id生成策略;2.IdType.AUTO--自動增長策略
- @TableId 註解的使用:顧名思義,這個註解標註實體類中字段對應數據庫中表的主鍵字段;當使用默認策略(雪花算法)特別注意自動生成主鍵是Long型;當使用AUTO自動增長策略,要注意數據庫設計中主鍵列也必需爲自動增長
- 默認策略
// 默認全局唯一id 雪花算法自動生成(默認)
@TableId(type = IdType.ID_WORKER)
private Long id;
- 自動增長
// AUTO: 自動增長
@TableId(type = IdType.AUTO)
private Long id;
`
2.自動填充插件
前言:阿里開發手冊中提及數據庫建表所有表中需包含:gmt_create(記錄創建時間) 和 gmt_modified(記錄修改時間)兩個字段,這兩個字段應該是自動化添加修改
- 實體類字段中添加 @TableField 註解
// 字段在 插入時操作
@TableField(fill = FieldFill.INSERT)
private Date gmtCreate;
// 字段在 插入和更新時 操作
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date gmtModified;
- 編寫源數據處理器 實現 MetaObjectHandler 注意注入ioc容器中
package com.ht.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* 源數據處理器
*/
@Slf4j
@Component // 將處理器 加入 ioc容器中 Spring託管
public class MyMetaObjectHandler implements MetaObjectHandler {
// 插入數據時的策略
@Override
public void insertFill(MetaObject metaObject) {
log.info("插入數據處理: ......");
// 爲字段填充值 實體類字段名 值
this.setFieldValByName("gmtCreate",new Date(),metaObject);
this.setFieldValByName("gmtModified",new Date(),metaObject);
}
// 更新數據時的策略
@Override
public void updateFill(MetaObject metaObject) {
log.info("更新數據處理: ......");
// 爲字段更新值
this.setFieldValByName("gmtModified",new Date(),metaObject);
}
}
3.樂觀鎖處理
前言:樂觀鎖,對任何操作不加鎖處理,直到出現問題再次更新測試,具體實現參照官網
- 進一步解釋樂觀鎖處理過程:
1.先查詢 獲得當前版本號
2.執行更新時 要 帶入version,只有當前更新記錄的版本號 與 第一步查詢的版本號一致時 纔可以更新
3.如果 第一步version 與 第二步 version不一致 更新失敗
4.執行更新 版本號 改變+1
實際操作:即實現線程安全;A線程 更新一條記錄;在執行過程中 B線程率先完成更新記錄(版本號改變);此時A線程第一步查詢的版本號 與 當前要更新記錄的版本號 已經不一致更新失敗。
- 實體類 版本號字段增加 @version註解
// 樂觀鎖 處理 版本號
@Version
private Integer version;
- 編寫配置類 註冊樂觀鎖插件
package com.ht.config;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration // 配置類
@EnableTransactionManagement // 開啓事務
@MapperScan("com.ht.mapper") // 掃描Mapper
public class MyBatisPlusConfig {
// 註冊樂觀鎖插件 攔截器
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
}
~ 後續:結合前端借用Mybatis-Plus中的分頁插件 實現分頁查詢...