统一处理Java实体类中的createTime, createBy, updateTime, updateBy字段

前言

在开发企业级应用的过程中,记录实体对象的创建时间、创建人以及最后更新时间、更新人的信息是一项常见的需求。为了简化开发流程,提高代码的可维护性和一致性,我们可以通过封装通用的方法来实现这些字段的自动填充。下面是一个简单的示例,展示了如何在Java实体类中实现createTimecreateByupdateTimeupdateBy字段的自动化生成。

方法定义与实现

public class BaseEntity {

    // 创建时间字段
    private Date createTime;
    // 创建者字段
    private String createBy;
    // 更新时间字段
    private Date updateTime;
    // 更新者字段
    private String updateBy;

    // 实现创建时自动填充创建时间和创建者
    public void genCreate() {
        this.createTime = new Date();
        // 假设SecurityUtils工具类提供获取当前登录用户名的方法
        this.createBy = SecurityUtils.getUsername();
    }

    // 实现更新时自动填充更新时间和更新者
    public void genUpdate() {
        this.updateTime = new Date();
        this.updateBy = SecurityUtils.getUsername();
    }
}

在上述代码中,BaseEntity作为一个基础实体类,包含了通用的创建和更新元信息字段。通过定义genCreate()genUpdate()方法,我们在实体对象创建时调用genCreate(),即可自动填充创建时间和创建者;而在实体对象更新前调用genUpdate(),则能自动填充更新时间和更新者。

应用场景及实现策略

创建时填充

在持久层(如Service或DAO层)新建实体对象并准备保存到数据库之前,调用genCreate()方法:

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User createUser(User user) {
        // 新建用户时自动填充创建信息
        user.genCreate();
        userRepository.save(user);
        return user;
    }
}

更新时填充

对于已存在的实体对象,在执行更新操作前调用genUpdate()方法:

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User updateUser(User user) {
        // 更新用户时自动填充更新信息
        user.genUpdate();
        userRepository.save(user);
        return user;
    }
}

总结

通过这种方式,我们可以显著降低代码重复,使得创建和更新实体对象时的时间戳和操作人信息管理变得简洁高效。当然,具体实现方式可能根据项目实际情况有所调整,比如利用AOP(面向切面编程)进行统一处理,或者结合ORM框架(如MyBatis、Hibernate等)的生命周期事件来自动触发填充逻辑等。无论如何,这种设计思路都为我们实现系统审计日志、追踪业务变更等提供了便利。

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 MyBatis Plus ,可以为不同实体类设置不同的自动填充规则。取消指定实体类createBy自动填充需要在实体类使用注解 `@TableField(fill = FieldFill.DEFAULT)` 来标识该字段不进行自动填充。具体来说,可以按照以下步骤进行操作: 1. 在实体类取消createBy的自动填充: ```java @TableField(fill = FieldFill.DEFAULT) private String createBy; ``` 2. 在MyBatis Plus配置为该实体类设置自动填充策略: ```java @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); //创建拦截器链 List<Interceptor> interceptorList = new ArrayList<>(); //自动填充拦截器 Interceptor fillInterceptor = new MybatisPlusAutoFillInterceptor(); //为指定实体类设置自动填充策略 List<MetaObjectHandler> metaObjectHandlers = new ArrayList<>(); //指定实体类的自动填充策略 metaObjectHandlers.add(new MybatisPlusMetaObjectHandler()); fillInterceptor.setProperties(Collections.singletonMap("metaObjectHandlers", metaObjectHandlers)); interceptorList.add(fillInterceptor); interceptor.setInterceptors(interceptorList); return interceptor; } } ``` 其,`MybatisPlusMetaObjectHandler`是自定义的MetaObjectHandler类,用于设置该实体类的自动填充规则。在该类,使用注解 `@Override` 标识重写的方法,然后在方法设置不需要自动填充的字段。例如: ```java public class MybatisPlusMetaObjectHandler extends BaseMetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { //设置createBy不进行自动填充 this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class); } @Override public void updateFill(MetaObject metaObject) { //设置updateBy不进行自动填充 this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class); } } ``` 这样,就可以为指定实体类设置自动填充规则,并取消createBy的自动填充。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值