环境描述:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE
前言在实际的开发过程中,我们经常需要在数据库操作中自动填写一些字段值,如创建时间、更新时间等。虽然手动填充是可行的,但很容易出错,代码冗余,影响开发效率。MyBatis-Plus提供了自动填充字段的功能,在插入和更新操作时可自动填充指定的字段值。
本文将介绍如何使用MyBatis-Plus实现字段的自动填充。
摘要本文将按照以下步骤完成字段自动填充功能:
- 引入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指定了填充类型,有以下常见选择:
- FieldFill.INSERT:插入时填充字段
- FieldFill.UPDATE:更新时填充字段
- 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实现字段自动填充的功能,主要分为以下步骤:
- 引入MyBatis-Plus依赖
- 创建实体类,并使用需要自动填充注释的字段
- 创建自定义的字段填充处理器
- 字段填充处理器在MyBatis-Plus的配置类中
通过上述步骤,我们可以很容易地自动填充数据库操作中的字段。
附录源码上述所有涉及的源码均已同步上传。「GitHub」,为学生提供一对一的参考学习,帮助您更快地掌握。
总结本文主要介绍了如何使用MyBatis-Plus实现字段自动填充功能。在实际开发过程中,我们经常需要在数据库操作中自动填写一些字段值,如创建时间、更新时间等。手动填充虽然可行,但容易出错,代码冗余,影响开发效率。采用MyBatis-Plus提供的字段自动填充功能,可在插入和更新操作时自动填充指定的字段值,减少手动填充的工作量,提高开发效率。
具体实现步骤如下:
引入MyBatis-Plus依赖;
创建实体类并使用注释指定的自动填充字段;
在插入和更新操作过程中,创建自定义字段填充处理器,自动填充指定字段值;
字段填充处理器配置在MyBatis-Plus的配置类中,使其生效。
通过上述步骤,我们可以在数据库操作过程中自动填充字段。在实际开发中,我们可以根据具体需要指定自动填充的字段类型和填充方法,以提高开发效率和代码质量。