欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis-Plus中的MetaObjectHandler組件的使用

 更新時間:2024年10月11日 10:28:28   作者:丿似錦  
MetaObjectHandler是Mybatis-Plus中一個實用組件,專門用于自動處理實體對象中的特定字段,如創(chuàng)建時間、更新時間、創(chuàng)建人和修改人等,該接口允許開發(fā)者在不修改業(yè)務代碼的情況下,實現自動填充功能,極大地簡化了代碼的復雜性,感興趣的可以了解一下

簡介

MetaObjectHandler 是一個非常有用的組件,用于處理實體對象中的字段填充邏輯,比如自動填充創(chuàng)建時間、更新時間、創(chuàng)建人、修改人等字段。

設計理念

在現代應用程序中,數據庫記錄的維護常常涉及到類似于“創(chuàng)建時間”、“更新時間”等公共字段。如果在每次插入或更新操作中都手動處理這些字段,不僅容易出錯,還增加了代碼的冗余。MetaObjectHandler 的設計初衷正是為了簡化這一過程,使得這些公共字段的處理變得自動化和無感知。

自動填充的優(yōu)勢

自動填充不僅減少了代碼的冗余,還提高了數據的一致性和完整性。通過自動填充,開發(fā)者可以確保每次數據庫操作都遵循相同的規(guī)則,避免了人為錯誤。此外,自動填充還可以提高開發(fā)效率,使開發(fā)者能夠專注于業(yè)務邏輯的實現。

組件介紹

MetaObjectHandler 接口允許在不修改業(yè)務代碼的情況下,對實體類中的字段進行自動填充。這通常用于記錄創(chuàng)建時間、更新時間、創(chuàng)建人、修改人等元數據信息。例如,在用戶注冊時自動設置創(chuàng)建時間,在更新用戶信息時自動更新最后修改時間。

此處實現自動填充創(chuàng)建人、修改人
創(chuàng)建時間、修改時間等交給MySQL進行自動填充

MetaObjectHandler 提供了以下核心方法:

  • void insertFill(MetaObject metaObject): 處理插入時的字段自動填充。
  • void updateFill(MetaObject metaObject): 處理更新時的字段自動填充。
  • MetaObjectHandler setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject): 用于設置指定字段的值。
  • Object getFieldValByName(String fieldName, MetaObject metaObject): 獲取指定字段的值。
  • TableInfo findTableInfo(MetaObject metaObject): 根據 MetaObject 獲取對應的表信息。

默認實現

MyBatis-Plus 提供了 MetaObjectHandler 的默認實現類。開發(fā)者可以通過繼承該類,來定制插入和更新時的字段填充邏輯。

嚴格填充策略

默認情況下,MetaObjectHandler 遵循嚴格填充策略,這意味著在字段已有值的情況下不會覆蓋該值,而是在字段為空時才進行填充。這種策略保證了數據的一致性,并防止不必要的覆蓋。

使用

實現 MetaObjectHandler 接口:
首先需要創(chuàng)建一個類實現 MetaObjectHandler 接口,并重寫其中的方法。

package com.zk.app.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.zk.app.utils.UserThreadLocalUtil;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

/**
 * @program: ZK
 * @description: 自定義mubatisplust填充
 * @author: zk
 * @create: 2024-07-17 11:30
 **/
@Component
public class ZKMetaObjectHandler implements MetaObjectHandler {
    /**
     * 創(chuàng)建人字段
     */
    private static final String CREATE_USER_ID = "createUserId";
    /**
     * 修改人字段
     */
    private static final String UPDATE_USER_ID = "updateUserId";

    @Override
    public void insertFill(MetaObject metaObject) {
        this.setUserId(metaObject, true);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setUserId(metaObject, false);
    }

    private void setUserId(MetaObject metaObject, boolean isInsert) {
        Long userId = UserThreadLocalUtil.getUserId();
        if (userId > 0) {
            if (isInsert) {
                this.setFieldValByName(CREATE_USER_ID, userId, metaObject);
            }
            this.setFieldValByName(UPDATE_USER_ID, userId, metaObject);
        }
    }
}

通過insertFill與updateFill在新增/更新時進行自動填充
UserThreadLocalUtil為ThreadLocal,主要為存儲當前線程的用戶信息

到此這篇關于Mybatis-Plus中的MetaObjectHandler組件的使用的文章就介紹到這了,更多相關Mybatis-Plus MetaObjectHandler 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • Spring Boot JPA中使用@Entity和@Table的實現

    Spring Boot JPA中使用@Entity和@Table的實現

    這篇文章主要介紹了Spring Boot JPA中使用@Entity和@Table的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • java中transient關鍵字用法分析

    java中transient關鍵字用法分析

    這篇文章主要介紹了java中transient關鍵字用法,以實例形式分析了java中transient關鍵字的功能及使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Springboot的自動配置是什么及注意事項

    Springboot的自動配置是什么及注意事項

    SpringBoot的自動配置(Auto-configuration)是指框架根據項目的依賴和應用程序的環(huán)境自動配置Spring應用上下文中的Bean和組件,目的是簡化開發(fā)者的配置工作,本文介紹Springboot的自動配置是什么及注意事項,感興趣的朋友一起看看吧
    2025-03-03
  • Java設計模式之橋模式(Bridge模式)介紹

    Java設計模式之橋模式(Bridge模式)介紹

    這篇文章主要介紹了Java設計模式之橋模式(Bridge模式)介紹,本文講解了為什么使用橋模式、如何實現橋模式、Bridge模式在EJB中的應用等內容,需要的朋友可以參考下
    2015-03-03
  • java 遍歷Map及Map轉化為二維數組的實例

    java 遍歷Map及Map轉化為二維數組的實例

    這篇文章主要介紹了java 遍歷Map及Map轉化為二維數組的實例的相關資料,希望通過本文能幫助到大家,實現這樣的功能,需要的朋友可以參考下
    2017-08-08
  • Java8中的Stream流式操作教程之王者歸來

    Java8中的Stream流式操作教程之王者歸來

    這篇文章主要給大家介紹了關于Java8中Stream流式操作的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java8具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • 詳解JAVA 反射機制

    詳解JAVA 反射機制

    這篇文章主要介紹了JAVA 反射機制的相關知識,文中講解的非常細致,代碼幫助大家更好的理解學習,感興趣的朋友可以了解下
    2020-06-06
  • swagger注解@ApiModelProperty失效情況的解決

    swagger注解@ApiModelProperty失效情況的解決

    這篇文章主要介紹了swagger注解@ApiModelProperty失效情況的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • java獲取文件的inode標識符的方法

    java獲取文件的inode標識符的方法

    這篇文章主要介紹了java獲取文件的inode標識符,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • spring-boot-klock-starter V1.1 主體功能重大更新內容介紹

    spring-boot-klock-starter V1.1 主體功能重大更新內容介紹

    這篇文章主要介紹了spring-boot-klock-starter V1.1 主體功能重大更新內容描述,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-01-01

最新評論