0
点赞
收藏
分享

微信扫一扫

Mybatis-plus字段自动填充功能介绍

新建实体公共字段类

@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;
}

上述代码中,我们定义了四个公共字段,分别是 createTimecreateUserupdateTimeupdateUser,并使用 @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 接口的两个方法 insertFillupdateFill,其中 insertFill 方法可以用于在插入数据时填充公共字段的值,updateFill 方法可以用于在更新数据时更新公共字段的值

举报

相关推荐

0 条评论