新建实体公共字段类
@Data
public class BaseEntity {
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime updateTime;
/**
* 创建人
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long createUser;
/**
* 修改人
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;
}
上述代码中,我们定义了四个公共字段,分别是 createTime
、createUser
、updateTime
、updateUser
,并使用 @TableField
注解通过 fill
属性指定了各个字段的填充方式。
实现 MetaObjectHandler 接口,并在Mybatis-plus 中启用自动填充
@Configuration
public class MyBatisPlusConfig {
@Bean
public MetaObjectHandler metaObjectHandler() {
return new MetaObjectHandler() {
@Autowired
private HttpServletRequest httpServletRequest;
@Override
public void insertFill(MetaObject metaObject) {
Object employeeId = httpServletRequest.getSession().getAttribute("employee");
this.setFieldValByName("createUser", employeeId, metaObject);
this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);
this.setFieldValByName("updateUser", employeeId, metaObject);
this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
Object employeeId = httpServletRequest.getSession().getAttribute("employee");
this.setFieldValByName("updateUser", employeeId, metaObject);
this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
}
};
}
}
上述代码中,实现了 MetaObjectHandler
接口的两个方法 insertFill
和 updateFill
,其中 insertFill
方法可以用于在插入数据时填充公共字段的值,updateFill
方法可以用于在更新数据时更新公共字段的值