日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MyBatis-Plus 高级功能 —— 自动填充功能

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis-Plus 高级功能 —— 自动填充功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、引言

小編先來解釋下自動填充是做什么的,大家有沒有在數據入庫的時候,不管新增或者修改數據,都要手動來設置添加時間和修改時間。而且每個插入都需要設置,而且數據庫還設置不能為空,就很煩惱。

雖然可以在數據庫設置默認值,但小編沒得數據庫表修改權限吶,那就從技術上來解決這個問題吧。

if (medicalProcedures.isEmpty()) {procedureConverter.setHisname(emrIpdEncounters.get(0).getHisName());// 手動添加值procedureConverter.setCreateTime(new Date());procedureConverter.setUpdateTime(new Date());emrIpdMedicalRecordManage.addMedicalProcedure(procedureConverter); }

二、自動填充實現

  • 步驟一:在實體類字段上,通過注解方式設置需要在執行什么操作填充,一共有三種:新增、更新、更新和操作
/*** 創建時間*/@TableField(fill = FieldFill.INSERT)private LocalDateTime createTime;/*** 修改時間*/@TableField(fill = FieldFill.UPDATE)private LocalDateTime updateTime;
  • 步驟二:創建一個新的類,實現MetaObjectHanlder接口,一個新增時填充的方法、一個修改時填充的方法
@Component public class MyMetaObjectHandler implements MetaObjectHandler {/*** 新增時填充** @param metaObject*/@Overridepublic void insertFill(MetaObject metaObject) {System.out.println("insertFill......");// createTime 對應實體屬性名, 第二個參數需要填充的值setInsertFieldValByName("createTime", LocalDateTime.now(), metaObject);}/*** 修改時填充** @param metaObject*/@Overridepublic void updateFill(MetaObject metaObject) {System.out.println("updateFill......");// updateTime 對應實體屬性名, 第二個參數需要填充的值setUpdateFieldValByName("updateTime", LocalDateTime.now(), metaObject);} }

三、自動填充使用細節

  • 細節一:這里的填充是針對整個數據庫的新增或者更新,都會執行填充的步驟,像這種創建時間和修改時間數據庫全表最好統一列名。

  • 細節二:如果有些數據庫的表沒有創建時間和修改時間字段,如果在執行這些操作有點浪費,可以這樣操作。

/*** 新增時填充* @param metaObject*/@Overridepublic void insertFill(MetaObject metaObject) {// 先判斷是否存在該字段boolean createTime = metaObject.hasSetter("createTime");if (createTime) {System.out.println("insertFill......");setInsertFieldValByName("createTime", LocalDateTime.now(), metaObject);}}
  • 細節三:有時候特殊表的填充字段,需要我們手動來設置值,但最后執行的時候又會被填充覆蓋掉,看以下操作。
/*** 修改時填充** @param metaObject*/@Overridepublic void updateFill(MetaObject metaObject) {// 先判斷該值是否為空,為空才填充Object updateTime = getFieldValByName("updateTime", metaObject);if (updateTime == null) {System.out.println("updateFill......");setUpdateFieldValByName("updateTime", LocalDateTime.now(), metaObject);}}
  • 細節四:自動填充功能不僅僅針對創建和修改時間,可根據項目需求所使用。

四、來自小伙伴們的補充

補充一:在使用更新自動填充時,只適用于updateById()來操作,如果平時使用Wrapper其他條件來更新時,是不會自動填充的。

文章轉自

總結

以上是生活随笔為你收集整理的MyBatis-Plus 高级功能 —— 自动填充功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。