Mybatis-plus 自动填充机制,实现自动填充

后端思维 2024-11-14 ⋅ 334 阅读

简介

在实际开发中,我们经常会遇到需要在数据库操作中填充一些公共字段的情况,比如创建时间和更新时间等。如果每次操作都手动填充这些字段,会很麻烦,而且容易出错。Mybatis-plus 提供了一个自动填充机制,可以方便地实现字段的自动填充,极大地减少了开发人员的工作量。

Mybatis-plus 自动填充机制

Mybatis-plus 的自动填充机制是通过拦截器实现的。它会在执行数据库的 insert 和 update 操作之前,自动填充指定的字段。具体实现的步骤如下:

  1. 创建一个实现 MetaObjectHandler 接口的类,用于填充字段的值。

    public class MyMetaObjectHandler implements MetaObjectHandler {
    
        @Override
        public void insertFill(MetaObject metaObject) {
            // 在插入操作时填充字段的值
            this.setFieldValByName("create_time", new Date(), metaObject);
            this.setFieldValByName("update_time", new Date(), metaObject);
        }
    
        @Override
        public void updateFill(MetaObject metaObject) {
            // 在更新操作时填充字段的值
            this.setFieldValByName("update_time", new Date(), metaObject);
        }
    }
    
  2. 在实体类的字段上使用 @TableField 注解来指定需要填充的字段。

    @TableName("my_table")
    public class MyEntity {
    
        // 声明需要填充的字段
        @TableField(fill = FieldFill.INSERT)
        private Date create_time;
    
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Date update_time;
    
        // ...其他字段和方法
    }
    
  3. 配置 Mybatis-plus,使其使用自定义的 MetaObjectHandler

    @Configuration
    public class MybatisPlusConfig {
    
        @Bean
        public MetaObjectHandler metaObjectHandler() {
            return new MyMetaObjectHandler();
        }
    }
    

使用 Mybatis-plus 自动填充

在实际使用中,我们只需要按照上述步骤配置好后,即可自动填充字段的值。下面是一个简单的示例:

@RestController
public class MyController {

    @Autowired
    private MyMapper myMapper;

    @PostMapping("/myEntity")
    public String saveMyEntity(@RequestBody MyEntity myEntity) {
        myMapper.insert(myEntity);
        return "success";
    }
}

在上述示例中,我们只需要通过 myMapper.insert(myEntity) 插入数据,不需要手动填充 create_timeupdate_time 字段,代码会自动调用插入前的填充操作,填充这两个字段的值。

总结

通过 Mybatis-plus 的自动填充机制,我们能够方便地实现数据库操作中字段的自动填充。这不仅大大减少了开发人员的工作量,还可以提高代码的可维护性和可读性。在实际开发中,我们应该充分利用这一机制,提高开发效率。


全部评论: 0

    我有话说: