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

Mybatis-Plus使用MetaObjectHandler實(shí)現(xiàn)自動(dòng)填充實(shí)體對(duì)象字段

 更新時(shí)間:2024年11月20日 09:09:08   作者:要開(kāi)心吖ZSH  
在我們使用Mybatis-Plus時(shí),一些簡(jiǎn)單的CRUD,你會(huì)發(fā)現(xiàn)好多表,許多字段是重復(fù)的,如果我們每次更新或者新增,都要手動(dòng)賦值,那么會(huì)出現(xiàn)許多不必要的重復(fù)操作,所以本文介紹了Mybatis-Plus使用MetaObjectHandler實(shí)現(xiàn)自動(dòng)填充實(shí)體對(duì)象字段,需要的朋友可以參考下

1.描述

在我們使用Mybatis-Plus時(shí),一些簡(jiǎn)單的CRUD。你會(huì)發(fā)現(xiàn)好多表,許多字段是重復(fù)的,比如:createTime、updateTime、createBy、updateBy等字段。如果我們每次更新或者新增,都要手動(dòng)賦值,那么會(huì)出現(xiàn)許多不必要的重復(fù)操作。那Mybatis-Plus有沒(méi)有一種方案,可以減少這種重復(fù)操作呢?當(dāng)然是有的,那就是MetaObjectHandler(元對(duì)象處理)。

主要功能

  • 自動(dòng)填充:可以在插入(insert)或更新(update)數(shù)據(jù)庫(kù)記錄時(shí),自動(dòng)填充指定的字段值。這對(duì)于記錄的創(chuàng)建時(shí)間和最后更新時(shí)間非常有用。
  • 靈活配置:可以通過(guò)注解或者全局配置的方式,指定哪些字段需要自動(dòng)填充,以及在什么情況下進(jìn)行填充(如僅在插入時(shí),或是在插入和更新時(shí)都進(jìn)行填充)。
  • 集成簡(jiǎn)單:只需要實(shí)現(xiàn) MetaObjectHandler 接口,并重寫(xiě)相應(yīng)的方法即可。同時(shí),在 Spring Boot 應(yīng)用中,只需將其實(shí)現(xiàn)類標(biāo)記為 @Component,就可以自動(dòng)生效

2.編碼

2.1 定義實(shí)體類

首先定義一個(gè)實(shí)體類,并使用 @TableField 注解來(lái)指定哪些字段需要自動(dòng)填充。例如:

package com.chinaunicom.medical.ihm.core.model;
 
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
 
import java.time.LocalDateTime;
import java.util.Date;
 
public class BaseModel extends IdModel {
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;
 
    @TableField(fill = FieldFill.INSERT)
    private String createBy;
 
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime updateTime;
 
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateBy;
 
    @Version
    @TableField(fill = FieldFill.INSERT)
    private Integer version;
 
    @TableLogic
    @TableField(fill = FieldFill.INSERT)
    private Integer deleted;
 
    public String getCreateBy() {
        return createBy;
    }
 
    public void setCreateBy(String createBy) {
        this.createBy = createBy;
    }
 
    public String getUpdateBy() {
        return updateBy;
    }
 
    public void setUpdateBy(String updateBy) {
        this.updateBy = updateBy;
    }
 
    public Integer getDeleted() {
        return deleted;
    }
 
    public void setDeleted(Integer deleted) {
        this.deleted = deleted;
    }
 
    public Integer getVersion() {
        return version;
    }
 
    public void setVersion(Integer version) {
        this.version = version;
    }
 
    public LocalDateTime getCreateTime() {
        return createTime;
    }
 
    public void setCreateTime(LocalDateTime createTime) {
        this.createTime = createTime;
    }
 
    public LocalDateTime getUpdateTime() {
        return updateTime;
    }
 
    public void setUpdateTime(LocalDateTime updateTime) {
        this.updateTime = updateTime;
    }
}

2.2 實(shí)現(xiàn) MetaObjectHandler

創(chuàng)建一個(gè)類實(shí)現(xiàn) MetaObjectHandler 接口,并覆蓋 insertFill 和 updateFill 方法。在這個(gè)方法中,根據(jù)字段的屬性來(lái)決定是否填充以及填充什么樣的值。例如:

package com.chinaunicom.medical.ihm.core.model;
 
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.chinaunicom.medical.ihm.core.context.SysContextHolder;
import org.apache.ibatis.reflection.MetaObject;
 
import java.time.LocalDateTime;
import java.util.Optional;
 
@Component
public class DateMetaObjectHandler implements MetaObjectHandler {
    private String createTimeField = "createTime";
    private String updateTimeField = "updateTime";
    private String createByField = "createBy";
    private String updateByField = "updateBy";
    private String versionField = "version";
    private String deletedField = "deleted";
    private String appIdField = "appId";
    private String tenantIdField = "tenantId";
    private String instanceIdField = "instanceId";
 
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, createTimeField, LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, updateTimeField, LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, versionField, Integer.class, 0);
        this.strictInsertFill(metaObject, deletedField, Integer.class, 0);
 
        this.strictInsertFill(metaObject, createByField, String.class, String.valueOf(Optional.ofNullable(SysContextHolder.getUserId()).orElse(0L)));
        this.strictInsertFill(metaObject, updateByField, String.class, String.valueOf(Optional.ofNullable(SysContextHolder.getUserId()).orElse(0L)));
 
//        this.strictInsertFill(metaObject, appIdField, Long.class, SysContextHolder.getApp());
//        this.strictInsertFill(metaObject, tenantIdField, Long.class, SysContextHolder.getTenant());
//        this.strictInsertFill(metaObject, instanceIdField, Long.class, SysContextHolder.getApplication());
    }
 
 
    @Override
    public void updateFill(MetaObject metaObject) {
        setFieldValByName(updateTimeField, LocalDateTime.now(), metaObject);
        setFieldValByName(updateByField, String.valueOf(Optional.ofNullable(SysContextHolder.getUserId()).orElse(0L)), metaObject);
 
    }
}

2.3 配置 MyBatis-Plus

確保你的項(xiàng)目中已經(jīng)正確配置了 MyBatis-Plus。通常情況下,如果你是使用 Spring Boot,則只需要添加 MyBatis-Plus 的依賴,并在 application.properties 或 application.yml 中做基本配置即可。

3.總結(jié)

  • 當(dāng)你實(shí)現(xiàn)了 MetaObjectHandler 并希望它能生效時(shí),確保該類已經(jīng)被 Spring 容器管理(即加上 @Component 注解)。
  • 如果你的項(xiàng)目中有多個(gè) MetaObjectHandler 實(shí)現(xiàn),它們會(huì)按照 Spring Bean 的加載順序依次執(zhí)行。
  • 在使用 strictInsertFill 和 strictUpdateFill 方法時(shí),確保傳遞的類型與實(shí)體類中字段的類型相匹配,否則可能會(huì)拋出異常。
  • 通過(guò)這種方式,MyBatis-Plus 能夠極大地簡(jiǎn)化開(kāi)發(fā)過(guò)程中的數(shù)據(jù)操作,減少手動(dòng)設(shè)置字段值的工作量,提高開(kāi)發(fā)效率。

到此這篇關(guān)于Mybatis-Plus使用MetaObjectHandler實(shí)現(xiàn)自動(dòng)填充實(shí)體對(duì)象字段的文章就介紹到這了,更多相關(guān)Mybatis-Plus自動(dòng)填充對(duì)象字段內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot新手入門(mén)的快速教程

    SpringBoot新手入門(mén)的快速教程

    這篇文章主要給大家介紹了關(guān)于SpringBoot新手入門(mén)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • IDEA 格式化SQL代碼技巧分享

    IDEA 格式化SQL代碼技巧分享

    這篇文章主要介紹了IDEA 格式化SQL代碼技巧分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Mybatis?Plus使用XML編寫(xiě)動(dòng)態(tài)sql的超簡(jiǎn)易方法

    Mybatis?Plus使用XML編寫(xiě)動(dòng)態(tài)sql的超簡(jiǎn)易方法

    這篇文章主要介紹了Mybatis?Plus使用XML編寫(xiě)動(dòng)態(tài)sql的超簡(jiǎn)易方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java 中 ChannelHandler的用法詳解

    java 中 ChannelHandler的用法詳解

    這篇文章主要介紹了java 中 ChannelHandler的用法詳解的相關(guān)資料,ChannelHandler處理一個(gè)I/O event或者攔截一個(gè)I/O操作,需要的朋友可以參考下
    2017-08-08
  • 一文帶你弄懂Maven拉包(拉取依賴包)原理

    一文帶你弄懂Maven拉包(拉取依賴包)原理

    業(yè)務(wù)需求開(kāi)發(fā)的時(shí)候,我們總是會(huì)遇到拉不到依賴包的情況,此時(shí)如果不清楚 Maven 拉取依賴包的原理,那么很可能找不到問(wèn)題所在,今天小編就帶大家了解下 Maven 拉包的原理,讓你在遇到問(wèn)題的時(shí)候能快速解決,需要的朋友可以參考下
    2023-07-07
  • springboot 設(shè)置局域網(wǎng)訪問(wèn)的實(shí)現(xiàn)步驟

    springboot 設(shè)置局域網(wǎng)訪問(wèn)的實(shí)現(xiàn)步驟

    Spring Boot是一個(gè)開(kāi)源Java-based框架,用于創(chuàng)建獨(dú)立的、生產(chǎn)級(jí)別的Spring應(yīng)用,它旨在簡(jiǎn)化Spring應(yīng)用的初始搭建及開(kāi)發(fā)過(guò)程,通過(guò)提供各種自動(dòng)配置的starter包,Spring Boot使得項(xiàng)目配置變得簡(jiǎn)單快速,感興趣的朋友一起看看吧
    2024-02-02
  • Java中常用隊(duì)列的使用解讀

    Java中常用隊(duì)列的使用解讀

    這篇文章主要介紹了Java中常用隊(duì)列的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Mybatis 緩存原理及失效情況解析

    Mybatis 緩存原理及失效情況解析

    這篇文章主要介紹了Mybatis 緩存原理及失效情況解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • MySQL+SSM+Ajax上傳圖片問(wèn)題

    MySQL+SSM+Ajax上傳圖片問(wèn)題

    本文主要介紹了MySQL+SSM+Ajax上傳圖片問(wèn)題。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • SpringBoot實(shí)現(xiàn)登錄攔截的示例代碼

    SpringBoot實(shí)現(xiàn)登錄攔截的示例代碼

    如果我們不進(jìn)行登錄攔截的話,即使我們跳過(guò)登錄頁(yè)面直接去訪問(wèn)任意一個(gè)頁(yè)面也能訪問(wèn)成功,那么登錄功能就沒(méi)有意義,同時(shí)也會(huì)存在安全問(wèn)題,本文就來(lái)介紹一下SpringBoot登錄攔截,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09

最新評(píng)論