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

Springboot實(shí)現(xiàn)公共字段填充的示例詳解

 更新時(shí)間:2023年10月05日 11:24:33   作者:xyy123  
這篇文章主要為大家詳細(xì)介紹了Springboot實(shí)現(xiàn)公共字段填充的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們深入學(xué)習(xí)springboot有一定的幫助,感興趣的小伙伴可以了解下

問題分析

方式一:自定義注解AutoFill

創(chuàng)建注解

/**  
* 自定義注解,用于標(biāo)識(shí)某個(gè)方法需要進(jìn)行功能字段自動(dòng)填充處理  
*/  
@Target(ElementType.METHOD)  // 只能加載方法上
@Retention(RetentionPolicy.RUNTIME)  // 固定寫法 
public @interface AutoFill {  
    //枚舉,數(shù)據(jù)庫(kù)操作類型:UPDATE INSERT  
    OperationType value();  
}

創(chuàng)建枚舉

/**  
* 數(shù)據(jù)庫(kù)操作類型  
*/  
public enum OperationType {  
    /**  
    * 更新操作  
    */  
    UPDATE,  
    /**  
    * 插入操作  
    */  
    INSERT  
}

創(chuàng)建切面類

/**  
* 自定義切面,實(shí)現(xiàn)公共字段自動(dòng)填充處理邏輯  
*/  
@Aspect  
@Component  
@Slf4j  
public class AutoFillAspect {  
    /**  
    * 切入點(diǎn),指定攔截mapper的下帶有autofill注解的方法
    */  
    @Pointcut("execution(* com.sky.mapper.*.*(..)) && @annotation(com.sky.annotation.AutoFill)")  
    public void autoFillPointCut(){
    }  
    /**  
    * 前置通知,在通知中進(jìn)行公共字段的賦值  
    */  
    @Before("autoFillPointCut()")  
    public void autoFill(JoinPoint joinPoint){  
        log.info("開始進(jìn)行公共字段自動(dòng)填充...");  
        //獲取到當(dāng)前被攔截的方法上的數(shù)據(jù)庫(kù)操作類型  
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();//方法簽名對(duì)象  
        AutoFill autoFill = signature.getMethod().getAnnotation(AutoFill.class);//獲得方法上的注解對(duì)象  
        OperationType operationType = autoFill.value();//獲得數(shù)據(jù)庫(kù)操作類型  
        //獲取到當(dāng)前被攔截的方法的參數(shù)--實(shí)體對(duì)象  
        Object[] args = joinPoint.getArgs();  
        if(args == null || args.length == 0){  
        return;  
    }  
    Object entity = args[0];  
    //準(zhǔn)備賦值的數(shù)據(jù)  
    LocalDateTime now = LocalDateTime.now();  
    Long currentId = BaseContext.getCurrentId();  
    //根據(jù)當(dāng)前不同的操作類型,為對(duì)應(yīng)的屬性通過反射來賦值  
    if(operationType == OperationType.INSERT){  
        //為4個(gè)公共字段賦值  
        try {  
            Method setCreateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_TIME, LocalDateTime.class);  
            Method setCreateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_USER, Long.class);  
            Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class);  
            Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class);  
            //通過反射為對(duì)象屬性賦值  
            setCreateTime.invoke(entity,now);  
            setCreateUser.invoke(entity,currentId);  
            setUpdateTime.invoke(entity,now);  
            setUpdateUser.invoke(entity,currentId);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }else if(operationType == OperationType.UPDATE){  
        //為2個(gè)公共字段賦值  
        try {  
            Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class);  
            Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class);  
            //通過反射為對(duì)象屬性賦值  
            setUpdateTime.invoke(entity,now);  
            setUpdateUser.invoke(entity,currentId);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
 }  
}

mapper方法中添加注解

方式二:使用mybatis plus提供方法

實(shí)體類添加注解 @TableField(fill = FieldFill.XXX)

package com.example.demo.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * 員工信息
 * @TableName employee
 */
@TableName(value ="employee")
@Data
@Accessors(chain = true)
public class Employee implements Serializable {
    /**
     * 主鍵
     */
    @TableId
    private Long id;
    /**
     * 姓名
     */
    private String name;
    /**
     * 創(chuàng)建時(shí)間
     */
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @TableField(fill = FieldFill.INSERT)//插入時(shí)填充字段
    private LocalDateTime createTime;
    /**
     * 更新時(shí)間
     */
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @TableField(fill = FieldFill.INSERT_UPDATE)//插入、更新時(shí)填充字段,后面的是枚舉
    private LocalDateTime updateTime;
    /**
     * 創(chuàng)建人
     */
    @TableField(fill = FieldFill.INSERT)
    private Long createUser;
    /**
     * 修改人
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Long updateUser;
}

創(chuàng)建數(shù)據(jù)處理器

package com.example.demo.common;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.example.demo.utils.RedisUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Autowired
    HttpServletRequest request;
    @Autowired
    RedisUtils redisUtils;
    @Override
    public void insertFill(MetaObject metaObject) {
        //填充創(chuàng)建時(shí)間
        metaObject.setValue("createTime", LocalDateTime.now());
        //填充 更新的時(shí)間
        metaObject.setValue("updateTime", LocalDateTime.now());
        Long result = BaseContext.get();
        //填充創(chuàng)建人信息
        metaObject.setValue("createUser",result);
        //填充更新人信息
        metaObject.setValue("updateUser",result);
    }
    @Override
    public void updateFill(MetaObject metaObject) {
        //因?yàn)槭歉?,所以不用操作?chuàng)建時(shí)間
        //更新 更新的時(shí)間
        metaObject.setValue("updateTime", LocalDateTime.now());
        Long result = BaseContext.get();;
        //填充更新人信息
        metaObject.setValue("updateUser",result);
    }
}

以上就是Springboot實(shí)現(xiàn)公共字段填充的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Springboot公共字段填充的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用Java打印數(shù)字組成的魔方陣及字符組成的鉆石圖形

    使用Java打印數(shù)字組成的魔方陣及字符組成的鉆石圖形

    這篇文章主要介紹了使用Java打印數(shù)字組成的魔方陣及字符組成的鉆石圖形,可作為一些CLI程序界面的基礎(chǔ)部分,需要的朋友可以參考下
    2016-03-03
  • java開發(fā)只要tomcat設(shè)計(jì)模式用的好下班就能早

    java開發(fā)只要tomcat設(shè)計(jì)模式用的好下班就能早

    這篇文章主要為大家介紹了java開發(fā)只要tomcat設(shè)計(jì)模式的示例詳解,<BR>只要設(shè)計(jì)模式用的好下班就能早,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • java之minio文件服務(wù)器的日常操作

    java之minio文件服務(wù)器的日常操作

    本文介紹如何在Java項(xiàng)目中配置Minio服務(wù),通過創(chuàng)建minioConfig和minioDto來管理連接信息,并通過minioUtils工具類實(shí)現(xiàn)文件的上傳、下載和刪除功能,詳細(xì)說明了如何從application.yml文件中讀取配置,并強(qiáng)調(diào)了避免static情況下minioDto為null的問題,另外,提到刪除操作是延遲的
    2024-10-10
  • MyBatis3源碼解析之如何獲取數(shù)據(jù)源詳解

    MyBatis3源碼解析之如何獲取數(shù)據(jù)源詳解

    用myBatis3與spring整合的時(shí)候,我們可以通過多種方式獲取數(shù)據(jù)源,下面這篇文章主要給大家介紹了關(guān)于MyBatis3源碼解析之如何獲取數(shù)據(jù)源的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • java實(shí)現(xiàn)基于UDP協(xié)議網(wǎng)絡(luò)Socket編程(C/S通信)

    java實(shí)現(xiàn)基于UDP協(xié)議網(wǎng)絡(luò)Socket編程(C/S通信)

    這篇文章主要介紹了java實(shí)現(xiàn)基于UDP協(xié)議網(wǎng)絡(luò)Socket編程(C/S通信),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • java實(shí)現(xiàn)簡(jiǎn)單的給sql語句賦值的示例

    java實(shí)現(xiàn)簡(jiǎn)單的給sql語句賦值的示例

    這篇文章主要介紹了java實(shí)現(xiàn)簡(jiǎn)單的給sql語句賦值的示例,需要的朋友可以參考下
    2014-05-05
  • SpringBoot2整合Redis實(shí)現(xiàn)讀寫操作

    SpringBoot2整合Redis實(shí)現(xiàn)讀寫操作

    Redis,對(duì)于大家來說應(yīng)該不陌生,是經(jīng)常使用的開發(fā)技術(shù)之一。本文將結(jié)合實(shí)例代碼,介紹SpringBoot2整合Redis實(shí)現(xiàn)讀寫操作,感興趣的小伙伴們可以參考一下
    2021-07-07
  • java拷貝指定目錄下所有內(nèi)容到minIO代碼實(shí)例

    java拷貝指定目錄下所有內(nèi)容到minIO代碼實(shí)例

    這篇文章主要介紹了java拷貝指定目錄下所有內(nèi)容到minIO代碼實(shí)例,創(chuàng)建桶 直接使用工具類先判斷,再創(chuàng)建即可,創(chuàng)建文件夾,需要注意以"/"結(jié)尾,實(shí)際也是在minIO上創(chuàng)建文件,只是作為目錄的表現(xiàn)形式展示,需要的朋友可以參考下
    2024-01-01
  • Spring中的Filter過濾器詳解

    Spring中的Filter過濾器詳解

    這篇文章主要介紹了Spring中的Filter過濾器詳解,Filter 程序是一個(gè)實(shí)現(xiàn)了特殊接口的 Java 類,與 Servlet 類似,也是由 Servlet 容器進(jìn)行調(diào)用和執(zhí)行的,需要的朋友可以參考下
    2023-08-08
  • Java全面解析XML格式串(JDOM解析)

    Java全面解析XML格式串(JDOM解析)

    下面小編就為大家?guī)硪黄狫ava全面解析XML格式串(JDOM解析)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06

最新評(píng)論

望奎县| 江陵县| 安陆市| 光山县| 普兰店市| 四会市| 英山县| 柯坪县| 大田县| 育儿| 桃园市| 高陵县| 措勤县| 邢台市| 金华市| 高要市| 诸暨市| 陇川县| 张掖市| 鲁甸县| 南通市| 中方县| 大英县| 射洪县| 天峨县| 浑源县| 玉环县| 成武县| 内丘县| 杭锦旗| 长丰县| 嘉兴市| 吐鲁番市| 青田县| 方正县| 饶河县| 衡东县| 武陟县| 高淳县| 元朗区| 铁力市|