最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis-Plus 自動(dòng)賦值實(shí)體字段最佳實(shí)踐指南

 更新時(shí)間:2025年07月24日 11:25:07   作者:一碗黃燜雞三碗米飯  
MyBatis-Plus通過@TableField注解與填充策略,實(shí)現(xiàn)時(shí)間戳、用戶信息、邏輯刪除等字段的自動(dòng)填充,減少手動(dòng)賦值,提升開發(fā)效率與數(shù)據(jù)一致性,是優(yōu)化數(shù)據(jù)庫操作的有效工具,本文給大家介紹MyBatis-Plus 自動(dòng)賦值實(shí)體字段的相關(guān)知識(shí),感興趣的朋友一起看看吧

MyBatis-Plus(簡(jiǎn)稱 MP)是 MyBatis 的增強(qiáng)工具包,提供了很多便利的功能,其中 自動(dòng)賦值實(shí)體字段 是開發(fā)中非常常見的需求。本文將深入探討 MyBatis-Plus 的自動(dòng)賦值機(jī)制,并通過詳細(xì)的 Java 代碼和表格進(jìn)行對(duì)比和解釋,幫助大家更好地掌握這個(gè)功能。

1. MyBatis-Plus 自動(dòng)賦值概述

MyBatis-Plus 提供了一種便捷的方式來自動(dòng)填充實(shí)體對(duì)象中的字段,尤其是在處理一些常見的數(shù)據(jù)庫操作時(shí)(如創(chuàng)建時(shí)間、更新時(shí)間等)。在進(jìn)行數(shù)據(jù)插入、更新操作時(shí),常常需要對(duì)某些字段進(jìn)行自動(dòng)填充,減少手動(dòng)賦值的工作量,提升開發(fā)效率。

1.1 適用場(chǎng)景

  • 時(shí)間戳自動(dòng)填充:如 createTimeupdateTime 等字段通常需要在插入或更新時(shí)自動(dòng)填充為當(dāng)前時(shí)間。
  • 用戶信息填充:如 createByupdateBy 等字段通常需要在操作時(shí)自動(dòng)填充當(dāng)前操作用戶。
  • 邏輯刪除標(biāo)識(shí):如 isDeleted 字段,插入時(shí)自動(dòng)填充 0,更新時(shí)填充 1 表示刪除。

1.2 自動(dòng)填充的原理

MyBatis-Plus 的自動(dòng)賦值字段主要通過 @TableField 注解與填充策略來實(shí)現(xiàn)。它通過配置特定的填充規(guī)則,使得在執(zhí)行插入、更新操作時(shí),某些字段能夠自動(dòng)填充。

1.3 填充策略

MyBatis-Plus 提供了四種常見的填充策略:

  • FieldFill.INSERT:在插入時(shí)填充
  • FieldFill.UPDATE:在更新時(shí)填充
  • FieldFill.INSERT_UPDATE:在插入和更新時(shí)都填充
  • FieldFill.DEFAULT:不指定填充策略,使用默認(rèn)填充規(guī)則

2. 關(guān)鍵注解與配置

MyBatis-Plus 提供了兩個(gè)關(guān)鍵注解用于自動(dòng)賦值字段的配置:@TableField@TableId。

2.1@TableField注解

@TableField 注解用于標(biāo)識(shí)實(shí)體類中的字段,配合 fill 屬性來定義自動(dòng)填充的行為。通過 fill 屬性,我們可以為字段指定填充策略。

示例:

@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
  • createTime 字段在插入時(shí)自動(dòng)填充。
  • updateTime 字段在插入和更新時(shí)自動(dòng)填充。

2.2@TableId注解

@TableId 注解用于指定實(shí)體類中的主鍵字段。在某些情況下,我們也可能需要對(duì)主鍵字段進(jìn)行自動(dòng)賦值。通常來說,MyBatis-Plus 會(huì)自動(dòng)處理主鍵生成策略(如自增、UUID 等)。

示例:

@TableId(type = IdType.AUTO)
private Long id;

該配置表示主鍵 id 使用數(shù)據(jù)庫自增。

2.3 配置填充策略

為了實(shí)現(xiàn)自動(dòng)賦值,我們需要配置填充策略。填充策略可以在 Mapper 層通過實(shí)現(xiàn) MetaObjectHandler 接口來指定。

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); // 插入時(shí)填充 createTime
        this.strictInsertFill(metaObject, "createBy", String.class, "admin");   // 插入時(shí)填充 createBy
    }
    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date()); // 更新時(shí)填充 updateTime
        this.strictUpdateFill(metaObject, "updateBy", String.class, "admin");   // 更新時(shí)填充 updateBy
    }
}

MetaObjectHandler 是 MyBatis-Plus 提供的接口,用于處理自動(dòng)填充的邏輯。通過實(shí)現(xiàn)該接口,我們可以在插入和更新時(shí)自定義字段的自動(dòng)填充行為。

3. 使用實(shí)例與代碼解析

3.1 實(shí)體類示例

假設(shè)我們有一個(gè) User 實(shí)體類,包含 id, username, createTime, updateTime 等字段,并希望在進(jìn)行插入和更新時(shí)自動(dòng)填充時(shí)間戳。

@Data
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String username;
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}

3.2 Mapper 示例

在 Mapper 接口中,我們可以直接使用 MyBatis-Plus 提供的 updateById, insert 等方法。

@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 自定義的數(shù)據(jù)庫操作方法
}

3.3 自動(dòng)賦值操作示例

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
    public void addUser(User user) {
        // 自動(dòng)填充的字段會(huì)被 MyBatis-Plus 處理
        userMapper.insert(user);
    }
    public void updateUser(User user) {
        // 自動(dòng)填充的字段會(huì)被 MyBatis-Plus 處理
        userMapper.updateById(user);
    }
}

在上述示例中,createTimeupdateTime 會(huì)在插入和更新時(shí)自動(dòng)填充。

4. 表格對(duì)比:不同填充策略行為

字段類型FieldFill.INSERTFieldFill.UPDATEFieldFill.INSERT_UPDATEFieldFill.DEFAULT
createTime僅在插入時(shí)填充不會(huì)填充會(huì)在插入和更新時(shí)填充根據(jù)默認(rèn)策略,通常是 INSERT
updateTime不會(huì)填充僅在更新時(shí)填充會(huì)在插入和更新時(shí)填充根據(jù)默認(rèn)策略,通常是 INSERT

通過表格,我們可以看到不同填充策略的行為區(qū)別。開發(fā)者可以根據(jù)業(yè)務(wù)需求來選擇合適的填充策略。

5. 總結(jié)與最佳實(shí)踐

5.1 自動(dòng)賦值的優(yōu)勢(shì)

  • 減少重復(fù)代碼:自動(dòng)填充時(shí)間戳和用戶信息等常見字段,避免手動(dòng)賦值。
  • 提高代碼可讀性:通過注解和配置清晰表達(dá)字段填充邏輯,簡(jiǎn)化代碼。
  • 保證數(shù)據(jù)一致性:自動(dòng)填充保證了字段值的一致性,減少人為錯(cuò)誤。

5.2 常見問題與解決方案

  • 填充不生效:請(qǐng)確保已正確配置 MetaObjectHandler,并且 @TableField(fill = FieldFill.xxx) 注解已加在正確的字段上。
  • 更新時(shí)覆蓋:修改配置類MyMetaObjectHandler
  • strictUpdateFill(): 保留更新實(shí)體對(duì)象的原有值,只在字段為空時(shí)才會(huì)進(jìn)行填充。
  • setFieldValByName(): 會(huì)強(qiáng)制覆蓋實(shí)體對(duì)象字段的原有值,不論字段是否為空。
  • 主鍵策略問題:在使用 @TableId 注解時(shí),需要明確指定主鍵生成策略(如 IdType.AUTO)。

5.3 最佳實(shí)踐

  • 使用 MetaObjectHandler 配置全局的字段填充策略。
  • 避免在業(yè)務(wù)層手動(dòng)設(shè)置常規(guī)字段(如時(shí)間戳、用戶信息),通過自動(dòng)填充來保證一致性。
  • 盡量避免過多的手動(dòng)填充,自動(dòng)賦值機(jī)制能有效減少錯(cuò)誤和重復(fù)代碼。

通過本文的學(xué)習(xí),相信你對(duì) MyBatis-Plus 自動(dòng)賦值實(shí)體字段的使用有了更深入的理解。合理利用 MyBatis-Plus 提供的自動(dòng)填充功能,可以大大提高開發(fā)效率并降低出錯(cuò)的概率。希望你在實(shí)際開發(fā)中能夠得心應(yīng)手地運(yùn)用這些技巧!

到此這篇關(guān)于MyBatis-Plus 自動(dòng)賦值實(shí)體字段的文章就介紹到這了,更多相關(guān)mybatisplus自動(dòng)賦值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的Map集合根據(jù)key值排序的實(shí)現(xiàn)

    Java中的Map集合根據(jù)key值排序的實(shí)現(xiàn)

    本文主要介紹了Java中的Map集合如何根據(jù)key值排序,包含使用TreeMap和使用lambda表達(dá)式和Stream流兩種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Java中instanceof的基本語法與用法詳解

    Java中instanceof的基本語法與用法詳解

    這篇文章主要介紹了Java中instanceof的基本語法與用法的相關(guān)資料,instanceof是Java中用于檢查對(duì)象是否是某個(gè)類或接口的實(shí)例的二元運(yùn)算符,需要的朋友可以參考下
    2025-03-03
  • Spring?@Cacheable指定失效時(shí)間實(shí)例

    Spring?@Cacheable指定失效時(shí)間實(shí)例

    這篇文章主要介紹了Spring?@Cacheable指定失效時(shí)間實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java簡(jiǎn)單工廠和工廠方法模式詳細(xì)解析

    Java簡(jiǎn)單工廠和工廠方法模式詳細(xì)解析

    這篇文章主要介紹了Java簡(jiǎn)單工廠和工廠方法模式詳細(xì)解析,簡(jiǎn)單工廠模式屬于類的創(chuàng)新型模式,又叫靜態(tài)工廠方法模式是通過專門定義一個(gè)類來負(fù)責(zé)創(chuàng)建其他類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類,需要的朋友可以參考下
    2023-12-12
  • SpringMVC 文件上傳配置,多文件上傳,使用的MultipartFile的實(shí)例

    SpringMVC 文件上傳配置,多文件上傳,使用的MultipartFile的實(shí)例

    本篇文章主要介紹了SpringMVC 文件上傳配置,詳解介紹了如何使用SpringMVC進(jìn)行表單上的文件上傳以及多個(gè)文件同時(shí)上傳的步驟,有興趣的可以了解一下。
    2016-12-12
  • JAVA不可變類(immutable)機(jī)制與String的不可變性(推薦)

    JAVA不可變類(immutable)機(jī)制與String的不可變性(推薦)

    這篇文章主要介紹了JAVA不可變類(immutable)機(jī)制與String的不可變性(推薦)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • 如何用Jfinal連接多個(gè)數(shù)據(jù)庫

    如何用Jfinal連接多個(gè)數(shù)據(jù)庫

    這篇文章主要介紹了如何用Jfinal連接多個(gè)數(shù)據(jù)庫,幫助大家更好的理解和學(xué)習(xí)使用Jfinal,感興趣的朋友可以了解下
    2021-03-03
  • 淺談使用java解析和生成JSON

    淺談使用java解析和生成JSON

    在www.json.org上公布了很多JAVA下的json構(gòu)造和解析工具,其中g(shù)oogle-gson和org.json比較簡(jiǎn)單,兩者使用上差不多但還是有些區(qū)別。下面我們就來分別介紹下用他們構(gòu)造和解析Json數(shù)據(jù)的方法示例。
    2015-08-08
  • MyBatis Generator配置入門

    MyBatis Generator配置入門

    本文主要介紹了MyBatis Generator配置入門,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 解析Java的InputStream類并借助其讀取ppt文件

    解析Java的InputStream類并借助其讀取ppt文件

    這篇文章主要介紹了Java的InputStream類并借助其讀取ppt文件,講到了InputStream類中一些常用的方法的問題,需要的朋友可以參考下
    2015-11-11

最新評(píng)論

和顺县| 普陀区| 莱阳市| 鹿泉市| 尼玛县| 昆山市| 襄樊市| 萍乡市| 双桥区| 瑞安市| 萍乡市| 正安县| 微山县| 延边| 通渭县| 株洲市| 铁岭市| 兴仁县| 辽宁省| 项城市| 那曲县| 凤山市| 东辽县| 莲花县| 栖霞市| 南和县| 鄂尔多斯市| 家居| 四川省| 五台县| 闻喜县| 八宿县| 邹城市| 海盐县| 遵化市| 定陶县| 连州市| 凤凰县| 新兴县| 彰化市| 平远县|