1. 程式人生 > 其它 >Mybatis-Plus 版本升級日誌(3.1.0 -> 3.5.1)

Mybatis-Plus 版本升級日誌(3.1.0 -> 3.5.1)

前言

最近看了下mp的官網更新日誌,版本已經更新到3.5.1了(2022.01.25),優化了不少地方,之前太忙沒時間升級,最近有閒下來時間那就搞一搞。

Mybatis-Plus官網地址

3.1.0老版本配置回顧

具體操作

1.pom修改

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency
>

2.yml配置(基本沒有變化,刪除了id-type配置)

mybatis-plus:
  # 配置mapper的掃描,找到所有的mapper.xml對映檔案
  mapper-locations: your.mapper.package
  #實體掃描
  typeAliasesPackage: your.entity.package
  global-config:
    # 資料庫相關配置
    db-config:
      #欄位策略 IGNORED:"忽略判斷", NOT_NULL:"非 NULL 判斷", NOT_EMPTY:"非空判斷"
      field-strategy: not_empty
      #駝峰下劃線轉換
      column-underline: true
      #資料庫大寫下劃線轉換
      capital-mode: true
      #table-prefix: sys_
      #邏輯刪除配置
      logic-delete-field: deleted
      logic-delete-value: 1
      logic-not-delete-value: 0
      # 資料庫型別
      db-type: mysql
    #重新整理mapper 除錯神器
    refresh: true
  # 原生配置
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false
    # 列印sql日誌
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3.外掛配置

新版外掛使用攔截器方式來配置

@Configuration
@MapperScan({"scan.your.mapper.package"})
public class MybatisPlusConfig {

    /**
     * 3.3.0之後的新版外掛配置
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        
//分頁外掛(根據實際情況指定資料庫型別,具體檢視DbType列舉) interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); //樂觀鎖外掛 interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); //邏輯刪除外掛不需要再單獨配置 //防止全表更新 //interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); // 設定請求的頁面大於最大頁後操作, true調回到首頁,false 繼續請求 預設false //paginationInnerInterceptor.setOverflow(false); // 設定最大單頁限制數量,預設 500 條,-1 不受限制 //paginationInnerInterceptor.setMaxLimit(500L); return interceptor; } }

4.自定義自動填充欄位處理器

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}

5.Entity基類

public class BaseEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    /** 主鍵id @JSONField該註解是解決Long型別太長傳值前端精度丟失 */
    /** id生成演算法 ASSIGN_ID(雪花演算法) (新版本去掉了id_woker)這裡配置了以後yml配置檔案裡無需再指定id-type,其他id生成方式檢視IdType列舉 */
    @JSONField(serializeUsing= ToStringSerializer.class)
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    /** 建立時間 插入自動填充 */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    /** 更新時間 插入和更新自動填充 */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;/** 邏輯刪除 0:正常 1:刪除 (新版本只需在此配置即可) */
    @TableLogic
    private Integer deleted;

    /** 樂觀鎖 */
    @Version
    private Integer version;
}

6.count()方法

//count()方法返回值型別從int改為long
Long count = baseMapper.selectCount(query);