当前位置: 首页 > 图灵资讯 > 技术篇> 如何使用MyBatis-Plus实现字段的自动填充?一文教会你

如何使用MyBatis-Plus实现字段的自动填充?一文教会你

来源:图灵教育
时间:2023-10-22 16:54:13

环境描述:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE
前言

在实际的开发过程中,我们经常需要在数据库操作中自动填写一些字段值,如创建时间、更新时间等。虽然手动填充是可行的,但很容易出错,代码冗余,影响开发效率。MyBatis-Plus提供了自动填充字段的功能,在插入和更新操作时可自动填充指定的字段值。

本文将介绍如何使用MyBatis-Plus实现字段的自动填充。

摘要

本文将按照以下步骤完成字段自动填充功能:

  1. 引入MyBatis-Plus依赖
  2. 创建实体类,并使用需要自动填充注释的字段
  3. 创建自定义的字段填充处理器
  4. 字段填充处理器在MyBatis-Plus的配置类中
MyBatis-Plus依赖于正文

首先,我们需要在maven中引入Mybatis-plus的依赖:

<!-- mybatis-依赖plus --><dependency>    <groupId>com.baomidou</groupId>    <artifactId>mybatis-plus-boot-starter</artifactId>    <version>3.4.3.2</version></dependency>
创建实体类并使用注释指定需要自动填充的字段

然后,我们将需要自动填写的字段定义为物理类,并使用注释进行标记。在这里,我们以用户表为例,定义了创建时间和更新时间。

@Data@NoArgsConstructor@AllArgsConstructor@Builderpublic class User {    private Long id;    private String name;        @TableField(fill = FieldFill.INSERT)    private Date createTime;        @TableField(fill = FieldFill.INSERT_UPDATE)    private Date updateTime;}

其中,注释@Tablefield属性fill指定了填充类型,有以下常见选择:

  1. FieldFill.INSERT:插入时填充字段
  2. FieldFill.UPDATE:更新时填充字段
  3. FieldFill.INSERT_UPDATE:在插入和更新时填充字段
创建自定义的字段填充处理器

然后,我们需要创建一个自定义的字段填充处理器,在插入和更新操作时自动填充指定的字段值。在这里,我们以创建时间和更新时间为例,创建CustomfieldFillHandler类,并继承MetaobjectHandler类。

@Componentpublic class CustomFieldFillHandler extends MetaObjectHandler {    @Override    public void insertFill(MetaObject metaObject) {        this.setFieldValByName("createTime", new Date(), metaObject);        this.setFieldValByName("updateTime", new Date(), metaObject);    }    @Override    public void updateFill(MetaObject metaObject) {        this.setFieldValByName("updateTime", new Date(), metaObject);    }}

在这里,我们重写了Metaobjecthandler的insertfilll和updatefilll方法,并指定了需要填写的字段名称和值。

配置字段填充处理器在MyBatis-Plus的配置类别中

最后,我们需要在Mybatis-plus的配置类别中配置字段填充处理器,使其生效。首先,我们创建了Mybatisplusconfig类别,并使用@bean注释来定义bean实例。

@Configurationpublic class MyBatisPlusConfig {    @Bean    public CustomFieldFillHandler customFieldFillHandler() {        return new CustomFieldFillHandler();    }}

然后,我们在配置类别中使用注释:

@Configuration@MapperScan("com.example.demo.mapper")@ServletComponentScanpublic class MyBatisPlusConfig {    @Bean    public CustomFieldFillHandler customFieldFillHandler() {        return new CustomFieldFillHandler();    }    /**     * MyBatis-Plus的全局设置     */    @Bean    public MybatisPlusInterceptor mybatisPlusInterceptor() {        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();        // 分页插件        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));        // 填充插件的字段        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());        interceptor.addInnerInterceptor(new TenantLineInnerInterceptor());        interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());        // 自定义插件        interceptor.addInnerInterceptor(new CustomInterceptor());        return interceptor;    }}

在这里,我们使用MybatisPlusinterceptor类进行插件配置,使用addddinerinterceptor方法添加optimisticlockerinerinterceptor(乐观锁插件)、TenantLineInnerInterceptor(多租户插件)、BlockAttackInnerInterceptor(防SQL注入插件)等插件。最重要的是我们添加了Custominterceptor(自定义插件),其中指定了CustomfieldFillHandler的Bean实例。

到目前为止,我们已经完成了MyBatis-Plus字段自动填充的功能。

测试用例

为了验证字段自动填充的功能是否正常工作,我们可以建立一个Usercontroller,并编写以下代码:

@RestController@RequestMapping("/user")public class UserController {    @Autowired    private UserService userService;    @PostMapping("/add")    public String add(@RequestBody User user) {        userService.save(user);        return "add success";    }    @GetMapping("/get/{id}")    public User get(@PathVariable Long id) {        return userService.getById(id);    }    @GetMapping("/list")    public List<User> list() {        return userService.list();    }}

操作程序,使用Postman测试添加用户界面,可以看到插入操作时,create_time和update_time字段的值已自动填充:

==>  Preparing: INSERT INTO user ( id, create_by, create_time, update_by, name, update_time ) VALUES ( ?, ?, ?, ?, ?, ? ) ==> Parameters: ad7a97a8ca153423d5d6f63c37(String), xxx(String), 2022-03-29 00:23:09.355(Timestamp), xxx(String), 我是bug菌(String), 2022-03-29 00:23:09.355(Timestamp)

修改数据测试截图如下:

在这里插入图片描述"

可以看到create_time和update_by自动填写。

小结

本文介绍了如何使用MyBatis-Plus实现字段自动填充的功能,主要分为以下步骤:

  1. 引入MyBatis-Plus依赖
  2. 创建实体类,并使用需要自动填充注释的字段
  3. 创建自定义的字段填充处理器
  4. 字段填充处理器在MyBatis-Plus的配置类中

通过上述步骤,我们可以很容易地自动填充数据库操作中的字段。

附录源码

  上述所有涉及的源码均已同步上传。「GitHub」,为学生提供一对一的参考学习,帮助您更快地掌握。

总结

本文主要介绍了如何使用MyBatis-Plus实现字段自动填充功能。在实际开发过程中,我们经常需要在数据库操作中自动填写一些字段值,如创建时间、更新时间等。手动填充虽然可行,但容易出错,代码冗余,影响开发效率。采用MyBatis-Plus提供的字段自动填充功能,可在插入和更新操作时自动填充指定的字段值,减少手动填充的工作量,提高开发效率。

具体实现步骤如下:

  1. 引入MyBatis-Plus依赖;

  2. 创建实体类并使用注释指定的自动填充字段;

  3. 在插入和更新操作过程中,创建自定义字段填充处理器,自动填充指定字段值;

  4. 字段填充处理器配置在MyBatis-Plus的配置类中,使其生效。

通过上述步骤,我们可以在数据库操作过程中自动填充字段。在实际开发中,我们可以根据具体需要指定自动填充的字段类型和填充方法,以提高开发效率和代码质量。