MyBatis-Plus自动填充
MyBatis-Plus自动填充功能是MyBatis-Plus框架提供的一种便捷的数据填充机制。通过自动填充功能,可以在插入和更新操作之前,自动为实体对象中定义的某些字段赋予特定的值,例如创建时间、更新时间等,这样可以减少开发人员的重复性工作,提高代码的简洁性和可维护性。
使用MyBatis-Plus自动填充需要?
自动填充功能通过实现MetaObjectHandler接口,并在配置文件中进行相应的配置,即可激活该功能
自定义实现MetaObjectHandler
/**
* 自定义实现MetaObjectHandler
*
* @author 一个肥鲇鱼
*/
@Component
public class DefaultDBFieldHandler implements MetaObjectHandler {
}
创建实体扩展类
把需要填充在属性,都放在BaseEntity类中,然后实体类继承扩展类
fill = FieldFill.INSERT 只执行新增方法的时候调用 fill = FieldFill.INSERT_UPDATE 执行新增和修改的时候调用
/**
* 扩展字段
*
* @author 一个肥鲇鱼
*/
public class BaseEntity {
/**
* 创建人
*/
@TableField(value = "create_by", fill = FieldFill.INSERT)
private Long createBy;
/**
* 更新人
*/
@TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
private Long updateBy;
public Long getCreateBy() {
return createBy;
}
public void setCreateBy(Long createBy) {
this.createBy = createBy;
}
public Long getUpdateBy() {
return updateBy;
}
public void setUpdateBy(Long updateBy) {
this.updateBy = updateBy;
}
}
重写MetaObjectHandler接口方法
/**
* 自定义实现MetaObjectHandler
*
* @author 一个肥鲇鱼
*/
@Component
public class DefaultDBFieldHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
try {
// 当前登录用户信息
SysUser sysUser = SecurityUtils.getSysUser();
if (sysUser == null) {
return;
}
if (Objects.nonNull(metaObject)) {
this.setFieldValByName("createBy", sysUser.getId(), metaObject);
this.setFieldValByName("updateBy", sysUser.getId(), metaObject);
}
} catch (Exception e) {
throw new BizException("自动填充拦截器异常:" + e.getMessage());
}
}
@Override
public void updateFill(MetaObject metaObject) {
try {
// 当前登录用户信息
SysUser sysUser = SecurityUtils.getSysUser();
if (sysUser == null) {
return;
}
if (Objects.nonNull(metaObject)) {
this.setFieldValByName("updateBy", sysUser.getId(), metaObject);
}
} catch (Exception e) {
throw new BizException("自动填充拦截器异常:" + e.getMessage());
}
}
}
这样在进行新增操作时候自动填充createBy和updateBy,修改操作会修改updateBy的值