国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Mybatis Plus 公共字段自動(dòng)填充功能

這篇具有很好參考價(jià)值的文章主要介紹了Mybatis Plus 公共字段自動(dòng)填充功能。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

?

1、問題引入

2、 基本功能實(shí)現(xiàn)

3、功能完善

3.1 ThreadLocal

3.1.1 介紹

3.1.2 常用方法

3.2 思路分析

3.3 代碼實(shí)現(xiàn)


1、問題引入

在我們的項(xiàng)目開發(fā)中,我們會(huì)發(fā)現(xiàn)有一些數(shù)據(jù)庫表字段是每個(gè)表都有的,例如 : 創(chuàng)建時(shí)間,創(chuàng)建人 ,更新時(shí)間,更新人。

而我們目前的針對(duì)這些字段我們的目前的處理方式就是 增加或者修改的時(shí)候一個(gè)一個(gè)的去賦值。

Mybatis Plus 公共字段自動(dòng)填充功能

如果都按照上面的方法進(jìn)行操作的話,那我們就需要在每個(gè)業(yè)務(wù)方法中進(jìn)行操作,這樣會(huì)不會(huì)顯得我們的代碼過于冗余、繁瑣。

這個(gè)時(shí)候我們就可以使用Mybatis Plus提供的公共字段自動(dòng)填充功能。

2、 基本功能實(shí)現(xiàn)

Mybatis Plus公共字段自動(dòng)填充,也就是在插入或者更新的時(shí)候?yàn)橹付ㄗ侄钨x予指定的值,使用它的好處就是可以統(tǒng)一對(duì)這些字段進(jìn)行處理,避免了重復(fù)代碼。

在上述的問題分析中,我們提到有四個(gè)公共字段,需要在新增/更新中進(jìn)行賦值操作, 具體情況如下:

字段名

賦值時(shí)機(jī)

說明

createTime

插入(INSERT)

當(dāng)前時(shí)間

updateTime

插入(INSERT) , 更新(UPDATE)

當(dāng)前時(shí)間

createUser

插入(INSERT)

當(dāng)前登錄用戶ID

updateUser

插入(INSERT) , 更新(UPDATE)

當(dāng)前登錄用戶ID

接下來我們就開始編寫代碼。

首先第一步就是在實(shí)體類的屬性上加入 @TableField 注解,指定自動(dòng)填充的策略。

Mybatis Plus 公共字段自動(dòng)填充功能

注 :

fill : 字段自動(dòng)填充策略

Mybatis Plus 公共字段自動(dòng)填充功能

添加好注解后,我們就需要按照框架要求編寫元數(shù)據(jù)對(duì)象處理器這樣的一個(gè)類,在此類中統(tǒng)一為公共字段賦值,注意!此類需要實(shí)現(xiàn)MetaObjectHandler接口。

Mybatis Plus 公共字段自動(dòng)填充功能

創(chuàng)建好類,我們就可以開始編寫操作代碼了。

Mybatis Plus 公共字段自動(dòng)填充功能

3、功能完善

細(xì)心的朋友已經(jīng)發(fā)現(xiàn),我們上面只填充了時(shí)間,并沒有填充創(chuàng)建人和更新人,現(xiàn)在我們就來完善一下。

本來我想的是,我登錄的時(shí)候是將用戶id存入了HttpSession中,現(xiàn)在我從HttpSession中獲取不就行了?

但是 ,MyMetaObjectHandler類中是不能直接獲得HttpSession對(duì)象的,所以我們需要通過其他方式來獲取登錄用戶id。

這里我們使用JAVA 給我們提供的一個(gè)類,ThreadLocal。

在了解 ThreadLocal 之前我們先了解當(dāng)我們?cè)谠黾樱薷膯T工信息時(shí), 我目前項(xiàng)目業(yè)務(wù)的執(zhí)行流程是什么樣子的,如下圖:

Mybatis Plus 公共字段自動(dòng)填充功能

客戶端發(fā)送的每次http請(qǐng)求,對(duì)應(yīng)的在服務(wù)端都會(huì)分配一個(gè)新的線程來處理,在處理過程中涉及到下面類中的方法都屬于相同的一個(gè)線程:

  • LoginCheckFilter (登錄過濾器) 的doFilter方法
  • Controller的方法
  • MyMetaObjectHandler的insertFill/updateFill方法

我們可以在上述類的方法中加入如下代碼(獲取當(dāng)前線程ID,并輸出):

long id = Thread.currentThread().getId();
log.info("線程id為:{}",id);

執(zhí)行功能進(jìn)行驗(yàn)證,通過觀察控制臺(tái)輸出可以發(fā)現(xiàn),一次請(qǐng)求對(duì)應(yīng)的線程id是相同的。

3.1 ThreadLocal

3.1.1 介紹

ThreadLocal并不是一個(gè)Thread,而是Thread的局部變量。當(dāng)使用ThreadLocal維護(hù)變量時(shí),ThreadLocal為每個(gè)使用該變量的線程提供獨(dú)立的變量副本,所以每一個(gè)線程都可以獨(dú)立地改變自己的副本,而不會(huì)影響其它線程所對(duì)應(yīng)的副本。

ThreadLocal為每個(gè)線程提供單獨(dú)一份存儲(chǔ)空間,具有線程隔離的效果,只有在線程內(nèi)才能獲取到對(duì)應(yīng)的值,線程外則不能訪問當(dāng)前線程對(duì)應(yīng)的值。

3.1.2 常用方法

public void set(T value)

設(shè)置當(dāng)前線程的線程局部變量的值

public T get()

返回當(dāng)前線程所對(duì)應(yīng)的線程局部變量的值

public void remove()

刪除當(dāng)前線程所對(duì)應(yīng)的線程局部變量的值

3.2 思路分析

  1. 我們可以先在LoginCheckFilter(登錄過濾器) doFilter方法中獲取當(dāng)前登錄用戶id。并調(diào)用ThreadLocalset方法來設(shè)置當(dāng)前線程的線程局部變量的值(用戶id)。
  2. MyMetaObjectHandlerinsertFill/updateFill方法中調(diào)用ThreadLocalget方法來獲得當(dāng)前線程所對(duì)應(yīng)的線程局部變量的值(用戶id)。
  3. 如果在后續(xù)的操作中, 我們需要在Controller / Service中要使用當(dāng)前登錄用戶的ID, 可以直接從ThreadLocal直接獲取。

3.3 代碼實(shí)現(xiàn)

首先為了使用方便,我們可以編寫一個(gè)基于ThreadLocal封裝的工具類,主要get 和 set 方法。

/**
 * @description: 基于ThreadLocal封裝工具類,用戶保存和獲取當(dāng)前登錄用戶id
 * @author: Jie
 * @date: 2022/8/12 14:18
 **/
public class BaseContext {
    private static ThreadLocal<Long> threadLocal = new ThreadLocal<>();

    /**
     * @description: 設(shè)置值
     * @author: Jie
     * @date: 2022/8/12 14:18
     * @param: [id] 線程id
     **/
    public static void setCurrentId(Long id){
        threadLocal.set(id);
    }
    /**
     * @description: 獲取值
     * @author: Jie
     * @date: 2022/8/12 14:18
     **/
    public static Long getCurrentId(){
        return threadLocal.get();
    }
}

然后在LoginCheckFilter(登錄過濾器)的doFilter方法中調(diào)用BaseContext來設(shè)置當(dāng)前登錄用戶的id。

Mybatis Plus 公共字段自動(dòng)填充功能

接下來我們就可以 在MyMetaObjectHandler的方法中調(diào)用BaseContext獲取登錄用戶的id。

Mybatis Plus 公共字段自動(dòng)填充功能文章來源地址http://www.zghlxwxcb.cn/news/detail-446290.html

到了這里,關(guān)于Mybatis Plus 公共字段自動(dòng)填充功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • mybatis-plus 自動(dòng)填充創(chuàng)建時(shí)間/更新時(shí)間

    mybatis-plus 自動(dòng)填充創(chuàng)建時(shí)間/更新時(shí)間

    方式一:數(shù)據(jù)庫級(jí)別 創(chuàng)建時(shí)間create_time字段設(shè)置類型為timestamp,默認(rèn)值為CURRENT_TIMESTAMP; 更新時(shí)間update_time字段設(shè)置類型為timestamp,默認(rèn)值為CURRENT_TIMESTAMP,勾選 根據(jù)當(dāng)前時(shí)間戳更新 。 實(shí)體類createTime字段設(shè)置數(shù)據(jù)類型為Date; 實(shí)體類updateTime字段設(shè)置數(shù)據(jù)類型為Date。 注意:

    2024年02月14日
    瀏覽(33)
  • 【mybatis-plus實(shí)體類復(fù)雜對(duì)象字段json自動(dòng)相互轉(zhuǎn)換,以及自定義字段類型解析器】

    引言: mybatis-plus集合對(duì)象字段json如何自動(dòng)進(jìn)行相互的轉(zhuǎn)換? 怎樣在使用mybatis-plus操作數(shù)據(jù)表的時(shí)候自動(dòng)對(duì)實(shí)體類屬性進(jìn)行自動(dòng)解析? 我們平時(shí)在做開發(fā)的時(shí)候,會(huì)遇到一個(gè)字段保存json串的情況。一般情況下mybatis-plus在做插入/更新之前將對(duì)象手動(dòng)轉(zhuǎn)換成json串,查詢要用的時(shí)

    2023年04月13日
    瀏覽(17)
  • Mybatis-Plus不能更新對(duì)象字段為空值問題解決

    Mybatis-Plus不能更新對(duì)象字段為空值問題解決

    問題描述: 在使用Mybatis-Plus調(diào)用updateById方法進(jìn)行數(shù)據(jù)更新默認(rèn)情況下是不能更新空值字段的,而在實(shí)際開發(fā)過程中,往往會(huì)遇到需要將字段值更新為空值的情況,該如何解決呢? 原因分析: Mybatis-Plus中字段的更新策略是通過FieldStrategy屬性控制的。在實(shí)體字段上,如果不通

    2024年02月12日
    瀏覽(20)
  • Mybtisplus對(duì)時(shí)間字段進(jìn)行自動(dòng)填充

    ? ? ? ? 這里我主要對(duì)字段createTime和updateTime進(jìn)行自動(dòng)填充,你們可以修改為自己對(duì)應(yīng)的字段即可。 ? ? ? ? 在需要填充的字段上加入?@TableField(fill = FieldFill.INSERT)或者?@TableField(fill = FieldFill.UPDATE),當(dāng)執(zhí)行SQL語句時(shí)就會(huì)攔截語句隨后對(duì)SQL語句添加了@TableField的時(shí)間字段進(jìn)行時(shí)

    2024年01月25日
    瀏覽(17)
  • mybatisplus在新增或者修改時(shí)設(shè)置字段自動(dòng)填充

    1、需要實(shí)現(xiàn)元對(duì)象字段填充控制器抽象類,如下代碼 fieldName要注意對(duì)應(yīng)的生成的實(shí)體字段,不是數(shù)據(jù)庫對(duì)應(yīng)字段,否則無效 2、在生成的實(shí)體字段,@TableField增加fill填充,并寫入填充的時(shí)機(jī)是新增還是修改 在此過程中可能會(huì)出現(xiàn)的錯(cuò): 修改或者插入的時(shí)候報(bào)類型無效,jav

    2024年01月17日
    瀏覽(18)
  • MyBatis Plus 數(shù)據(jù)庫字段加密處理

    當(dāng)項(xiàng)目開發(fā)到一半,可能突然客戶會(huì)要求對(duì)數(shù)據(jù)庫里面比如手機(jī)號(hào)、身份證號(hào)的字段進(jìn)行加密; 在保證開發(fā)最快、影響范圍最小的情況下,我們需要選擇一種介于數(shù)據(jù)庫和代碼之間的工具來幫我們實(shí)現(xiàn)自動(dòng)加解密; 這里我們選用AES對(duì)稱加密算法,因?yàn)樗强赡嫠惴ā?AES加密

    2024年02月07日
    瀏覽(27)
  • Mybatis-plus更新字段為null

    更新時(shí),把某些字段的值更新為null,但是目前mybatis-plus的update/updateById會(huì)忽略實(shí)體類中為null的字段,導(dǎo)致這些字段沒有更新還是原來的值。 網(wǎng)上比較常用的有兩種: 缺點(diǎn):當(dāng)在其它接口更新別的字段時(shí),本來沒有想更新這個(gè)字段,但是也會(huì)把這個(gè)字段更新為null。 缺點(diǎn):需

    2024年02月06日
    瀏覽(21)
  • Mybatis-plus怎么更新Null字段?

    本文介紹【Mybatis-plus】updateById()方法不能更新字段為null的原因及解決辦法。 在日常項(xiàng)目開發(fā)過程中,經(jīng)常會(huì)使用Mybatis-plus的updateById()方法,快速將接收道德參數(shù)或者查詢結(jié)果中原本不為null的字段更新為null,并且該字段在數(shù)據(jù)庫中可為null,這個(gè)時(shí)候使用updateById()并不能實(shí)現(xiàn)

    2024年02月13日
    瀏覽(37)
  • mybatis-plus更新字段為null值

    mybatis-plus更新字段為null值

    mybatis-plus相信大家都不陌生所以不在介紹 首先我們先看一下mybatis-plus的官網(wǎng)上的介紹 ?官網(wǎng)推薦的有三種方式可以實(shí)現(xiàn) 第一種:調(diào)整全局策略, mybatis-plus默認(rèn)的全局策略為NOT_NULL非空默認(rèn)策略,其實(shí)就是當(dāng)更新是某個(gè)字段為空,則不對(duì)該字段進(jìn)行更新,這也是我們常用的策略所此種

    2024年02月14日
    瀏覽(25)
  • mybatis-plus 根據(jù)指定字段 批量 刪除/修改

    mybatis-plus 根據(jù)指定字段 批量 刪除/修改

    mybatis-plus 提供了根據(jù)id批量更新和修改的方法,這個(gè)大家都不陌生 但是當(dāng)表沒有id的時(shí)候怎么辦) 這個(gè)就不說了,就是因?yàn)椴幌胧謱慡QL 所以才有這篇博客 mybatis plus 的 executeBatch 參考 mybatis plus 的updateBatchById 方法. 調(diào)用處: 接口 重寫方法 實(shí)現(xiàn) 這種寫法其實(shí)批量的效率還是比較慢的

    2024年02月13日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包