SpringBoot整合Mybatis相关-SpringBoot整合MybatisPlus自动保存操作人操作时间等-《Java笔记》

admin 2025-10-19 05:12:36 编程 来源:ZONE.CI 全球网 0 阅读模式

Java SpringBoot Mybatis使用Mybatis的时候,Mybatis提倡的是简单,官方也没有类似的功能,这个时候如果业务需要审计数据的时候需要手工维护,这时候可以模仿JPA实现一个类似的功能,如下:

使用Mybatis Plus插件

  1. <dependency>
  2. <groupId>com.baomidou</groupId>
  3. <artifactId>mybatis-plus-boot-starter</artifactId>
  4. <version>${version}</version>
  5. </dependency>

自定义实现自动填充Handler

  1. public class AuditMetaObjectHandler extends MetaObjectHandler {
  2. @Override
  3. public void insertFill(MetaObject metaObject) {
  4. boolean createDate = metaObject.hasSetter("createDate");
  5. boolean updateDate = metaObject.hasSetter("updateDate");
  6. if (createDate || updateDate) {
  7. Date now = new Date();
  8. if (createDate) {
  9. this.setFieldValByName("createDate", now, metaObject);
  10. }
  11. if (updateDate) {
  12. this.setFieldValByName("updateDate", now, metaObject);
  13. }
  14. }
  15. String username = ...;//获取用户,如果使用SpringSecurity的话可以从SecurityContext中获取
  16. if (metaObject.hasSetter("createUser")) {
  17. this.setFieldValByName("createUser", username, metaObject);
  18. }
  19. if (metaObject.hasSetter("updateUser")) {
  20. this.setFieldValByName("updateUser", username, metaObject);
  21. }
  22. }
  23. @Override
  24. public void updateFill(MetaObject metaObject) {
  25. if (metaObject.hasSetter("updateDate")) {
  26. this.setFieldValByName("updateDate", new Date(), metaObject);
  27. }
  28. if (metaObject.hasSetter("updateUser")) {
  29. // TODO 获取用户,如果使用SpringSecurity的话可以从SecurityContext中获取
  30. String username = ...;
  31. this.setFieldValByName("updateUser", username, metaObject);
  32. }
  33. }
  34. }

启用配置

MybatisPlusConfigurer配置中新增配置

  1. /**
  2. * 审计数据插件
  3. *
  4. * @return AuditMetaObjectHandler
  5. */
  6. @Bean
  7. @ConditionalOnMissingBean(name = "auditMetaObjectHandler")
  8. public AuditMetaObjectHandler auditMetaObjectHandler() {
  9. return new AuditMetaObjectHandler();
  10. }

配置实体类

  1. public class UserDO implement Serializable{
  2. //TODO 省略
  3. /**
  4. * 创建时间
  5. */
  6. @TableField(value = "create_date", fill = FieldFill.INSERT)
  7. private Date createDate;
  8. /**
  9. * 创建用户
  10. */
  11. @TableField(value = "create_user", fill = FieldFill.INSERT)
  12. private String createUser;
  13. /**
  14. * 更新时间
  15. */
  16. @TableField("update_date", fill = FieldFill.INSERT_UPDATE)
  17. private Date updateDate;
  18. /**
  19. * 更新用户
  20. */
  21. @TableField("update_user", fill = FieldFill.INSERT_UPDATE)
  22. private String updateUser;
  23. }

总结

这样就可以实现类似 Spring Data JPA 的审计功能

以太坊cppgolang区别 编程

以太坊cppgolang区别

以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
progolang 编程

progolang

Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
golangn个发送者 编程

golangn个发送者

Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
golang技能图谱 编程

golang技能图谱

从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
评论:0   参与:  9