亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mybatis-Plus中的MetaObjectHandler組件的使用

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

簡(jiǎn)介

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

設(shè)計(jì)理念

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

自動(dòng)填充的優(yōu)勢(shì)

自動(dòng)填充不僅減少了代碼的冗余,還提高了數(shù)據(jù)的一致性和完整性。通過(guò)自動(dòng)填充,開(kāi)發(fā)者可以確保每次數(shù)據(jù)庫(kù)操作都遵循相同的規(guī)則,避免了人為錯(cuò)誤。此外,自動(dòng)填充還可以提高開(kāi)發(fā)效率,使開(kāi)發(fā)者能夠?qū)W⒂跇I(yè)務(wù)邏輯的實(shí)現(xiàn)。

組件介紹

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

此處實(shí)現(xiàn)自動(dòng)填充創(chuàng)建人、修改人
創(chuàng)建時(shí)間、修改時(shí)間等交給MySQL進(jìn)行自動(dòng)填充

MetaObjectHandler 提供了以下核心方法:

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

默認(rèn)實(shí)現(xiàn)

MyBatis-Plus 提供了 MetaObjectHandler 的默認(rèn)實(shí)現(xiàn)類(lèi)。開(kāi)發(fā)者可以通過(guò)繼承該類(lèi),來(lái)定制插入和更新時(shí)的字段填充邏輯。

嚴(yán)格填充策略

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

使用

實(shí)現(xiàn) MetaObjectHandler 接口:
首先需要?jiǎng)?chuàng)建一個(gè)類(lèi)實(shí)現(xiàn) MetaObjectHandler 接口,并重寫(xiě)其中的方法。

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);
        }
    }
}

通過(guò)insertFill與updateFill在新增/更新時(shí)進(jìn)行自動(dòng)填充
UserThreadLocalUtil為T(mén)hreadLocal,主要為存儲(chǔ)當(dāng)前線程的用戶(hù)信息

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

相關(guān)文章

  • Spring Boot JPA中使用@Entity和@Table的實(shí)現(xiàn)

    Spring Boot JPA中使用@Entity和@Table的實(shí)現(xiàn)

    這篇文章主要介紹了Spring Boot JPA中使用@Entity和@Table的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • java中transient關(guān)鍵字用法分析

    java中transient關(guān)鍵字用法分析

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

    Springboot的自動(dòng)配置是什么及注意事項(xiàng)

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

    Java設(shè)計(jì)模式之橋模式(Bridge模式)介紹

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

    java 遍歷Map及Map轉(zhuǎn)化為二維數(shù)組的實(shí)例

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

    Java8中的Stream流式操作教程之王者歸來(lái)

    這篇文章主要給大家介紹了關(guān)于Java8中Stream流式操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java8具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 詳解JAVA 反射機(jī)制

    詳解JAVA 反射機(jī)制

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

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

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

    java獲取文件的inode標(biāo)識(shí)符的方法

    這篇文章主要介紹了java獲取文件的inode標(biāo)識(shí)符,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • spring-boot-klock-starter V1.1 主體功能重大更新內(nèi)容介紹

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

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

最新評(píng)論