什么是自動填充
有些表中會有更新時間、創建時間、更新人或者創建人這些欄位,
每次對資料進行新增、洗掉、修改時都需要對這些欄位進行設定,傳統的做法是在進行這些操作前,對Entity的欄位進行set設定,然后再進行操作,這種做法不僅容易忘記導致出錯、而且代碼會顯得特別冗余,
雖然新增時間和修改時間可以使用資料庫的時間,但是新增人和修改人就不能使用這樣的功能,
所以MP就提供自動填充的功能,幫助自定設定這些欄位的值,提升開發效率,代碼也會顯得特別優雅,
使用MP實作自動填充
step1:在Entity上添加注解
// 插入資料時進行自動填充
@TableField(fill = FieldFill.INSERT)
private Date createTime;
// 更新資料時進行自動填充
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
step2:撰寫自動填充實作類
@Configuration
@EnableTransactionManagement
@MapperScan("com.csx.demo.spring.boot.dao")
public class MyBatisPlusConfig {
private static final Logger log = LoggerFactory.getLogger(MyBatisPlusConfig.class);
// MetaObjectHandler 這介面有很多方法,一般情況下只需要實作這兩個方法就行了
// 其他方法感興趣的可以自己進去看下
@Component
public class MyFillHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
// 起始版本 3.3.0(推薦使用)
this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
// 起始版本 3.3.0(推薦)
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
}
}
}
關于上面的實作類,需要注意下面幾點:
- 需要實作com.baomidou.mybatisplus.core.handlers.MetaObjectHandler介面,而且整個Spring容器中只能有一個實作;
- MetaObjectHandler提供的默認方法的策略均為:如果屬性有值則不覆寫,如果填充值為null則不填充;
- 要想根據注解FieldFill.xxx和欄位名以及欄位型別來區分必須使用父類的strictInsertFill或者strictUpdateFill方法;
- 不需要根據任何來區分可以使用父類的fillStrategy方法,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/247275.html
標籤:Java
