MyBatis-Plus 自動填充功能

MyBatis-Plus(MP) 提供了一個非常強大的功能——自動填充功能。該功能可以在執行插入或更新操作時,自動為某些字段賦值,免去手動設置這些字段的麻煩。常見的應用場景包括 創建時間更新時間 字段的自動填充,幫助開發者在處理數據時更加高效,減少人為錯誤。

本文將介紹 MyBatis-Plus 自動填充功能 的概念、實現步驟、場景應用以及如何配置和自定義填充規則。


1. 自動填充的概念

自動填充功能指的是,當執行 插入(INSERT)更新(UPDATE) 操作時,某些字段可以由 MyBatis-Plus 自動賦值,無需開發者手動提供。這些字段通常是一些系統字段,比如:

  • 創建時間:記錄實體對象的創建時間。
  • 更新時間:記錄實體對象的最后修改時間。

自動填充通過 字段注解 配合 MetaObjectHandler 實現,可以自動為某些字段設置默認值,避免重復的代碼邏輯。


2. 實現自動填充的步驟

要實現 MyBatis-Plus 的自動填充功能,通常需要以下幾個步驟:

2.1 步驟 1:在實體類中標注自動填充字段

在實體類中,使用 MyBatis-Plus 提供的 @TableField 注解,指定需要自動填充的字段,并設置 fill 屬性。

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.IdType;import java.time.LocalDateTime;public class User {@TableId(value = "id", type = IdType.AUTO)private Long id;private String name;@TableField(fill = FieldFill.INSERT)private LocalDateTime createTime;@TableField(fill = FieldFill.INSERT_UPDATE)private LocalDateTime updateTime;// Getters and Setters
}
  • @TableField(fill = FieldFill.INSERT):表示在插入數據時自動填充字段,如 createTime 字段在插入時自動賦值。
  • @TableField(fill = FieldFill.INSERT_UPDATE):表示在插入和更新時都會自動填充字段,如 updateTime 字段。

2.2 步驟 2:實現 MetaObjectHandler 接口

MyBatis-Plus 通過 MetaObjectHandler 接口來實現字段的自動填充功能。開發者需要實現該接口,并重寫 insertFillupdateFill 方法。

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;import java.time.LocalDateTime;@Component
public class MyMetaObjectHandler implements MetaObjectHandler {// 插入時自動填充@Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 自動填充創建時間this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 自動填充更新時間}// 更新時自動填充@Overridepublic void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 自動填充更新時間}
}

在這個實現中:

  • insertFill:在插入操作時自動填充字段,例如將當前時間賦值給 createTimeupdateTime 字段。
  • updateFill:在更新操作時自動填充字段,通常只會更新 updateTime 字段。

2.3 步驟 3:注冊 MetaObjectHandler

MetaObjectHandler 接口的實現類需要通過 @Component 注解標記為 Spring Bean,這樣 Spring Boot 會自動掃描并注入到 MyBatis-Plus 中。

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {// 同上
}

3. 自動填充的場景應用(創建時間、更新時間)

3.1 創建時間(createTime

創建時間 字段通常在數據插入時自動填充。它記錄了數據創建的時間,通常使用 LocalDateTime 類型存儲。

實現示例

在實體類中,我們使用 @TableField(fill = FieldFill.INSERT) 來確保插入數據時自動填充 createTime 字段。

@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;

MetaObjectHandler 中,我們設置 insertFill 方法自動填充當前時間:

@Override
public void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
}

3.2 更新時間(updateTime

更新時間 字段通常在數據更新時自動填充,記錄數據最后一次修改的時間。updateTime 字段需要通過 @TableField(fill = FieldFill.INSERT_UPDATE) 注解來進行配置,使得在插入和更新時都能自動填充。

實現示例

在實體類中,我們使用 @TableField(fill = FieldFill.INSERT_UPDATE) 來確保插入和更新時自動填充 updateTime 字段。

@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;

MetaObjectHandler 中,我們設置 updateFill 方法自動填充當前時間:

@Override
public void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}

3.3 自動填充的效果

通過上述配置,在執行插入和更新操作時,MyBatis-Plus 會自動為 createTimeupdateTime 字段填充當前時間,無需開發者顯式賦值。

User user = new User();
user.setName("John");
userService.save(user);  // 自動填充 createTime 和 updateTime

4. 配置與自定義填充規則

4.1 配置自動填充字段

在 MyBatis-Plus 中,我們可以通過 @TableField 注解的 fill 屬性來指定需要自動填充的字段。當執行插入或更新操作時,Spring 會自動為這些字段填充值。

示例:配置自動填充字段
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;

4.2 自定義填充規則

如果需要自定義填充規則,例如在創建時使用自定義的時間格式或設置特定的字段值,可以在 MetaObjectHandler 中進行實現。

示例:自定義填充規則
@Override
public void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());  // 自動填充當前時間this.strictInsertFill(metaObject, "status", Integer.class, 1);  // 自定義填充規則:status 默認值為 1
}

在此示例中,我們不僅自動填充 createTime 字段,還將 status 字段的默認值設置為 1


5. 總結

  • 自動填充功能 是 MyBatis-Plus 的一項強大特性,能夠減少手動設置系統字段的工作,提升開發效率。
  • 通過 @TableField 注解中的 fill 屬性,開發者可以輕松配置需要自動填充的字段,如 創建時間更新時間
  • 自定義填充規則 允許開發者在插入和更新時根據需求設置字段的默認值,進一步增強了靈活性。
  • 使用 MetaObjectHandler 接口,開發者可以靈活控制自動填充的字段,在 insertFillupdateFill 方法中定義自動填充規則。

通過 MyBatis-Plus 提供的自動填充功能,開發者可以更加高效地進行數據處理,減少代碼冗余,并確保系統字段的一致性和正確性。 🚀

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896571.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896571.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896571.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

final 關鍵字在不同上下文中的用法及其名稱

1. final 變量 名稱:final 變量(常量)。 作用:一旦賦值后,值不能被修改。 分類: final 實例變量:必須在聲明時或構造函數中初始化。 final 靜態變量:必須在聲明時或靜態代碼塊中初…

springboot項目部署腳本

Springboot部署腳本 該腳本可用于jenkins自動執行,具有以下功能 適配所有以內嵌tomcat容器springboot項目jar包可根據參數選擇環境,基于profiles可自動識別并關閉已存在進程第一個參數是指定jar包所在絕對路徑(該路徑下必須有且僅有一個.jar文件) 第二…

向量數據庫milvus部署

官方文檔 Milvus vector database documentationRun Milvus in Docker (Linux) | Milvus DocumentationMilvus vector database documentation 按部署比較簡單,這里說一下遇到的問題 一:Docker Compose 方式部署 1、鏡像無法拉取,(docker.io被禁) …

【密碼學實戰】Java 實現 SM2 國密算法(簽名帶id、驗簽及 C1C3C2 加密解密)

前言 SM2是中國國家密碼管理局發布的橢圓曲線公鑰密碼算法標準(GB/T 32918),屬于國密算法體系。與RSA和ECDSA相比,SM2在相同安全強度下密鑰更短、計算效率更高。本文將介紹如何在Java中實現SM2的密鑰生成、數字簽名、驗簽、加密及…

網絡原理---TCP/IP

活動發起人小虛竹 想對你說: 這是一個以寫作博客為目的的創作活動,旨在鼓勵大學生博主們挖掘自己的創作潛能,展現自己的寫作才華。如果你是一位熱愛寫作的、想要展現自己創作才華的小伙伴,那么,快來參加吧&#xff01…

【大語言模型筆記進階一步】提示語設計學習筆記,跳出框架思維,自己構建提示詞

一、大語言模型應用場景 1. 文本生成 文本創作: 詩歌故事,劇本,推文帖子 摘要與改寫: 長文本摘要與簡化,多語言翻譯與本地化 結構化生成: 表格,根據需求生成代碼片段,API文檔生成…

Unity XR-XR Interaction Toolkit開發使用方法(十一)組件介紹(XR Interactable)

目錄 一、插件介紹 二、主要組件 XR Interaction Manager XR Controller XR Interactor XR Direct Interactor XR Ray Interactor XR Socket Interactor XR Gaze Interactor XR Interaction Group 三、XR Interactable 1、組件介紹 2、核心功能與特點 交互類型支…

Spring Boot spring-boot-maven-plugin 參數配置詳解

一 spring-boot-maven-plugin 插件的5個Goals spring-boot:repackage,默認goal。在mvn package之后,再次打包可執行的jar/war,同時保留mvn package生成的jar/war為.origin;重新打包存在的jar或者war包從而使他們可以在命令行使用…

eMMC安全簡介

1. 引言 術語“信息安全”涵蓋多種不同的設計特性。一般而言, 信息安全是指通過實踐防止信息遭受未經授權的訪問、使用、披露、中斷、篡改、檢查、記錄或銷毀。 信息安全的三大核心目標為 機密性(Confidentiality)、完整性(Integr…

Python 數據結構 2.時間復雜度和空間復雜度

Life is a journey —— 25.2.28 一、引例:窮舉法 1.單層循環 所謂窮舉法,就是我們通常所說的枚舉,就是把所有情況都遍歷了的意思。 例:給定n(n ≤ 1000)個元素ai,求其中奇數有多少個 判斷一…

FFmpeg-chapter3-讀取視頻流(原理篇)

ffmpeg網站:About FFmpeg 1 庫介紹 (1)libavutil是一個包含簡化編程函數的庫,包括隨機數生成器、數據結構、數學例程、核心多媒體實用程序等等。 (2)libavcodec是一個包含音頻/視頻編解碼器的解碼器和編…

面試(進階) —虛擬列表在什么場景使用,如何實現?

面試(進階) —虛擬列表在什么場景使用,如何實現? 在前端開發中,當需要渲染大量數據時,傳統的渲染方式往往會遇到性能瓶頸。一次性將大量數據渲染到DOM中,不僅會導致頁面加載緩慢,還可能占用大量內存&#x…

Linux Mem -- 關于AArch64 MTE功能的疑問

目錄 1.虛擬地址和物理地址映射完成后,才可以設置虛擬地址對應的memory tag ? 2.各種memory allocator中的address tag從哪來,怎么產生? 2.1 vmalloc allocator 2.2 slub分配器 2.3 用戶可以指定IRG指令產生的address tag 3.kasan…

python-leetcode-顏色分類

75. 顏色分類 - 力扣&#xff08;LeetCode&#xff09; class Solution:def sortColors(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""low, mid, high 0, 0, len(nums) - 1while mid < h…

ArcGIS Pro技巧實戰:高效矢量化天地圖地表覆蓋圖

在地理信息系統&#xff08;GIS&#xff09;領域&#xff0c;地表覆蓋圖的矢量化是一項至關重要的任務。天地圖作為中國國家級的地理信息服務平臺&#xff0c;提供了豐富且詳盡的地表覆蓋數據。然而&#xff0c;這些數據通常以柵格格式存在&#xff0c;不利于進行空間分析和數據…

【江科大STM32】TIM輸出比較(學習筆記)

本章圖片文字內容也為重要知識&#xff0c;請馬住&#xff01; 輸出比較簡介 OC&#xff08;Output Compare&#xff09;輸出比較輸出比較可以通過比較CNT與CCR寄存器值的關系&#xff0c;來對輸出電平進行置1、置0或翻轉的操作&#xff0c;用于輸出一定頻率和占空比的PWM波形…

【網絡安全 | 漏洞挖掘】利用文件上傳功能的 IDOR 和 XSS 劫持會話

未經許可,不得轉載。 本文涉及漏洞均已修復。 文章目錄 前言正文前言 想象這樣一個場景:一個專門處理敏感文檔的平臺,如保險理賠或身份驗證系統,卻因一個設計疏漏而成為攻擊者的“金礦”。在對某個保險門戶的文件上傳功能進行測試時,我意外發現了一個可導致大規模賬戶接管…

飛算 JavaAI 如何讓微服務開發快人一步?

在當今競爭激烈的軟件開發領域&#xff0c;微服務架構因其靈活性和可擴展性備受青睞。然而&#xff0c;微服務開發過程復雜&#xff0c;從需求分析到最終代碼實現&#xff0c;每個環節都需要耗費大量時間和精力。飛算 JavaAI 的出現&#xff0c;猶如一道曙光&#xff0c;為開發…

Python—Excel全字段轉json文件(極速版+GUI界面打包)

目錄 專欄導讀1、背景介紹2、庫的安裝3、核心代碼4、完整代碼(簡易版)5、進階版(GUI)總結專欄導讀 ?? 歡迎來到Python辦公自動化專欄—Python處理辦公問題,解放您的雙手 ?????? 博客主頁:請點擊——> 一晌小貪歡的博客主頁求關注 ?? 該系列文章專欄:請點擊——…

2025年光電科學與智能傳感國際學術會議(ICOIS 2025)

重要信息 官網&#xff1a;www.ic-icois.org 時間&#xff1a;2025年3月14-16日 地點&#xff1a;中國-長春 簡介 2025年光電科學與智能傳感國際學術會議&#xff08;ICOIS 2025&#xff09;將于2025年3月14-16日在中國-長春隆重召開。會議將圍繞“光學光電”、“智能傳感”…