在这里用的是3.3.0版本的mybatis plus
package fun.liyl.framework.datasource;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import fun.liyl.common.utils.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.function.Supplier;
/**
* @description:
* @author: LiYunLong
* @time: 2022/6/25 23:09
*/
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
this.strictInsertFill(metaObject, "createId", Long.class, SecurityUtils.getUserId());
this.strictInsertFill(metaObject, "createBy", String.class, SecurityUtils.getUsername());
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.strictUpdateFill(metaObject, "updateId", Long.class, SecurityUtils.getUserId());
this.strictUpdateFill(metaObject, "updateBy", String.class, SecurityUtils.getUsername());
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
}
@Override
public MetaObjectHandler strictFillStrategy(MetaObject metaObject, String fieldName, Supplier<Object> fieldVal) {
return this.setFieldValByName(fieldName, fieldVal.get(), metaObject);
}
}
package fun.liyl.framework.web.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* Entity基类
*
* @author star
*/
@Data
public class NewBaseEntity implements Serializable
{
/** 创建者ID */
@TableField(value = "create_id",fill = FieldFill.INSERT)
private Long createId;
/** 创建者 */
@TableField(value = "create_by",fill = FieldFill.INSERT)
private String createBy;
/** 创建时间 */
@TableField(value = "create_time",fill = FieldFill.INSERT)
private Date createTime;
/** 更新者ID */
@TableField(value = "update_id",fill = FieldFill.UPDATE)
private Long updateId;
/** 更新者 */
@TableField(value = "update_by",fill = FieldFill.UPDATE)
private String updateBy;
/** 更新时间 */
@TableField(value = "update_time",fill = FieldFill.UPDATE)
private Date updateTime;
}
踩坑记录
- 实体类和handler类方法中的属性类型要一致。
- 重写MetaObjectHandler方法,不然更新的时候第一次更新过就不会再更新了。