MyBatis-Plus中自動填充功能的用法示例詳解
前言
有些時(shí)候我們可能會有這樣的需求,插入或者更新數(shù)據(jù)時(shí),希望有些字段可以自動填充數(shù)據(jù),比如密碼、version、注冊時(shí)默認(rèn)的用戶角色等。在MP中提供了這樣的功能,可以實(shí)現(xiàn)自動填充功能。
下面例子的場景假設(shè):如果用戶在注冊時(shí),只會輸入基本的用戶信息,這是后臺有個(gè)字段為user_role用戶角色,普通用戶注冊的話都會自動以USER值設(shè)置,但這個(gè)值不是用戶輸入的,需要自動填充。
下面我們就根據(jù)這個(gè)假設(shè)來看看該如何實(shí)現(xiàn)這一功能。
一、添加@TableField注解
在持久化User類中,將角色對應(yīng)的屬性上添加注解@TableField(fill= FieldFill.INSERT),INSERT用來插入數(shù)據(jù)時(shí)進(jìn)行填充。如下代碼所示:
//角色 @TableField(fill= FieldFill.INSERT)//插入數(shù)據(jù)時(shí)進(jìn)行填充 private String userRole;
當(dāng)然,不只是在插入時(shí)可自動填充。還可設(shè)置在修改時(shí),或者插入修改時(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í)就不需要設(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í)用戶輸入的數(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)文章希望大家以后多多支持腳本之家!
- MyBatis-Plus自動填充字段的詳細(xì)教程
- Mybatis-Plus實(shí)現(xiàn)公共字段自動填充的項(xiàng)目實(shí)踐
- mybatis-plus 新增/修改如何實(shí)現(xiàn)自動填充指定字段
- 使用Mybatis-plus實(shí)現(xiàn)時(shí)間自動填充(代碼直接可用)
- 實(shí)例詳解MyBatis-plus自動填充功能
- Mybatis-Plus自動填充更新操作相關(guān)字段的實(shí)現(xiàn)
- mybatis-plus自動填充插入更新時(shí)間有8小時(shí)時(shí)差
- MyBatis-Plus 自動填充的實(shí)現(xiàn)示例
相關(guān)文章
ConditionalOnProperty配置swagger不生效問題及解決
這篇文章主要介紹了ConditionalOnProperty配置swagger不生效問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06Java基于Netty實(shí)現(xiàn)Http server的實(shí)戰(zhàn)
本文主要介紹了Java基于Netty實(shí)現(xiàn)Http server的實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下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í)價(jià)值,需要的朋友可以參考下2021-09-09