Mybatis-Plus:CRUD拓展系列(主鍵生成策略,自動填充,樂觀鎖)

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中的分頁插件 實現分頁查詢...

~ 實現效果:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章