關於mybatis plus 中 MetaObjectHandler 自動填充功能出現的問題及處理


1、自動填充的字段:

createdBy,updatedBy,createdDate,updatedDate
/**
* 插入使用
*/

@Override
public void insertFill(MetaObject metaObject) { String operator = "bokai"; fillValue(metaObject, CREATED_BY, () -> operator); fillValue(metaObject, UPDATED_BY, () -> operator); fillValue(metaObject, CREATED_DATE, () -> getDateValue(metaObject.getSetterType(CREATED_DATE))); fillValue(metaObject, UPDATED_DATE, () -> getDateValue(metaObject.getSetterType(UPDATED_DATE))); } @Override public void updateFill(MetaObject metaObject) { String operator = "bokai"; fillValue(metaObject, "et."+UPDATED_BY, () -> operator); fillValue(metaObject, "et."+UPDATED_DATE, () -> getDateValue(metaObject.getSetterType("et."+UPDATED_DATE))); } private void fillValue(MetaObject metaObject, String fieldName, Supplier<Object> valueSupplier) { if (!metaObject.hasGetter(fieldName)) { return; } Object sidObj = metaObject.getValue(fieldName); if (sidObj == null && metaObject.hasSetter(fieldName) && valueSupplier != null) { setFieldValByName(fieldName, valueSupplier.get(), metaObject); } } private Object getDateValue(Class<?> setterType) { if (Date.class.equals(setterType)) { return new Date(); } else if (LocalDateTime.class.equals(setterType)) { return LocalDateTime.now(); } return null; }

涉及獲取需要更新的createdDateupdatedDate 字段屬性的類型

2、insertFill方法和updateFill方法的入參 MetaObject metaObject 中的屬性不同

 

 metaObject.getSettreType()獲取字段屬性類型的Class在 insertFill 和 updateFill 中就不能同樣使用了

 

  insertFill中metaObject如下:

 

 

 

 

  updateFill中metaObject如下:

 

 

 我們去看BaseMapper源碼,如下:

 

 

 可以看出update的語句都有 et

更新時,我們需要使用et.字段名才會生效


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM