1. 程式人生 > 實用技巧 >mybatis獲取引數數值的兩個方式

mybatis獲取引數數值的兩個方式

實現MetaObjectHandler介面
重寫方法

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

@Override
public void insertFill(MetaObject metaObject) {
if (UserContext.getUser() != null) {
this.strictInsertFill(metaObject, "creator", String.class, UserContext.getUser().getUsername());

}
this.strictInsertFill(metaObject, "creationtime", LocalDateTime.class, LocalDateTime.now());
Class<?> clazz = metaObject.getOriginalObject().getClass();
//如果存在最後更新時間
try {
Field lastupdate = clazz.getDeclaredField("lastupdate");
this.strictInsertFill(metaObject, "lastupdate", Timestamp.class
, new Timestamp(System.currentTimeMillis()));
} catch (NoSuchFieldException ex) {
log.info(clazz.getName() + "不需要儲存lastupdatetime");
}
}

@Override
public void updateFill(MetaObject metaObject) {
if (UserContext.getUser() != null) {
this.setFieldValByName("modifier", UserContext.getUser().getUsername(), metaObject);
}
this.setFieldValByName("modifiedtime", LocalDateTime.now(), metaObject);
Class<?> clazz = metaObject.getOriginalObject().getClass();
//如果存在最後更新時間
try {
Field lastupdate = clazz.getDeclaredField("lastupdate");
this.setFieldValByName("lastupdate", new Timestamp(System.currentTimeMillis()), metaObject);
} catch (NoSuchFieldException ex) {
log.info(clazz.getName() + "不需要儲存lastupdatetime");
}
}
}


注意的是:如果存在資料不覆蓋,使用strictInsertFill/strictUpdateFill。比如建立時間,建立人
如果想覆蓋資料,使用setFieldValByName。比如修改時間,修改人