MyBatis-Plus中自動填充功能的用法示例詳解
前言
有些時候我們可能會有這樣的需求,插入或者更新數(shù)據(jù)時,希望有些字段可以自動填充數(shù)據(jù),比如密碼、version、注冊時默認(rèn)的用戶角色等。在MP中提供了這樣的功能,可以實(shí)現(xiàn)自動填充功能。
下面例子的場景假設(shè):如果用戶在注冊時,只會輸入基本的用戶信息,這是后臺有個字段為user_role用戶角色,普通用戶注冊的話都會自動以USER值設(shè)置,但這個值不是用戶輸入的,需要自動填充。
下面我們就根據(jù)這個假設(shè)來看看該如何實(shí)現(xiàn)這一功能。
一、添加@TableField注解
在持久化User類中,將角色對應(yīng)的屬性上添加注解@TableField(fill= FieldFill.INSERT),INSERT用來插入數(shù)據(jù)時進(jìn)行填充。如下代碼所示:
//角色 @TableField(fill= FieldFill.INSERT)//插入數(shù)據(jù)時進(jìn)行填充 private String userRole;
當(dāng)然,不只是在插入時可自動填充。還可設(shè)置在修改時,或者插入修改時都自動填充的操作。如下圖所示:
二、編寫MyMetaObjectHandler
我們需要編寫MyMetaObjectHandler類,在類下需要繼承MetaObjectHandler接口實(shí)現(xiàn)其方法,在方法內(nèi)編寫要自動填充的字段。
因?yàn)槲覀兪且蕴砑訛槔?,所以這里就直接在insertFill下編寫自動填充的內(nèi)容,如果增加操作傳下來的屬性值為null的話,就要自動讓該屬性值設(shè)置為USER角色。如果有值的話我們不做操作。所以接下來只需要判斷字段是否為空就可以。
代碼如下所示:
package cn.imust.mp.handler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { Object userRole=getFieldValByName("userRole",metaObject); if(null == userRole){ //字段為空,可以進(jìn)行填充 setFieldValByName("userRole","USER",metaObject); } } @Override public void updateFill(MetaObject metaObject) { } }
三、對自動填充進(jìn)行測試
在測試類下編寫testInsert()方法,傳值時就不需要設(shè)置userRole的值,添加完成后查看是否會自動填充(即查看userRole是否為USER值)
//測試添加方法 @Test public void testInsert(){ User user=new User(); user.setUserName("哈哈111"); user.setUserEmail("12433"); // user.setUserRole("ADMIN"); user.setUserStatus("0"); user.setUserPassword("12344"); // 表中沒有字段 user.setHobby("足球"); //受影響的行數(shù) count int count = userMapper.insert(user); if(count>0){//添加成功 //輸出所有數(shù)據(jù) testSelectList(); }else {//添加失敗 System.out.println("添加失敗~"); } }
四、運(yùn)行效果圖
執(zhí)行上述的測試代碼,得到如下圖所示的效果圖,添加成功在查詢會發(fā)現(xiàn)userRole的值會被自動填充成上面設(shè)置的USER即普通用戶的值。 說明測試成功~
總結(jié)
MP中的自動填充功能在實(shí)際中也是經(jīng)常使用的知識點(diǎn),大家要多多練習(xí)掌握,就像開發(fā)中時用戶輸入的數(shù)據(jù)肯定不會是對應(yīng)數(shù)據(jù)庫表的全部字段,有些字段都需要系統(tǒng)自動填充值,這里就需要自動填充功能來完成。步驟也很簡單,多多練習(xí)兩遍就能夠掌握并且熟練運(yùn)用其知識點(diǎn)。
到此這篇關(guān)于MyBatis-Plus中自動填充功能的用法的文章就介紹到這了,更多相關(guān)MyBatis-Plus自動填充內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ConditionalOnProperty配置swagger不生效問題及解決
這篇文章主要介紹了ConditionalOnProperty配置swagger不生效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06Java基于Netty實(shí)現(xiàn)Http server的實(shí)戰(zhàn)
本文主要介紹了Java基于Netty實(shí)現(xiàn)Http server的實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02Skywalking改成適配阿里云等帶Http?Basic的Elasticsearch服務(wù)
這篇文章主要介紹了改造Skywalking支持阿里云等帶Http?Basic的Elasticsearch服務(wù)2022-02-02java Servlet 實(shí)現(xiàn)動態(tài)驗(yàn)證碼圖片示例
這篇文章主要介紹了java Servlet 實(shí)現(xiàn)動態(tài)驗(yàn)證碼圖片示例的資料,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2017-02-02Java中JMM與volatile關(guān)鍵字的學(xué)習(xí)
這篇文章主要介紹了通過實(shí)例解析JMM和Volatile關(guān)鍵字的學(xué)習(xí),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2021-09-09