好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

MybatisPlus 插入或更新数据时自动填充更新数据解决方案

Maven

?

1

2

3

4

5

6

7

8

9

10

11

12

< parent >

     < groupId >org.springframework.boot</ groupId >

     < artifactId >spring-boot-starter-parent</ artifactId >

     < version >2.2.6.RELEASE</ version >

     < relativePath /> <!-- lookup parent from repository -->

</ parent >

 

< dependency >

     < groupId >com.baomidou</ groupId >

     < artifactId >mybatis-plus-boot-starter</ artifactId >

     < version >3.1.0</ version >

</ dependency >

解决方案

1、 实体类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

/**

  * 基础Bean

  */

@Data

public class BaseEntity implements Serializable {

 

     @TableField (value = "create_user" , fill = FieldFill.INSERT) // 新增执行

     private String createUser;

 

     @TableField (value = "create_time" , fill = FieldFill.INSERT)

     private LocalDateTime createTime;

 

     @TableField (value = "update_user" , fill = FieldFill.INSERT_UPDATE) // 新增和更新执行

     private String updateUser;

 

     @TableField (value = "update_time" , fill = FieldFill.INSERT_UPDATE)

     private LocalDateTime updateTime;

 

     @TableField (value = "remark" )

     private String remark;

 

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

@Data

@TableName ( "sys_dept" )

public class SysDeptEntity extends BaseEntity {

 

     private static final long serialVersionUID = 1L;

 

     /**

      * 部门ID

      **/

     @TableId

     private Long deptId;

 

     /**

      * 部门父节点ID

      **/

     private Long parentId;

 

     /**

      * 部门名称

      **/

     private String deptName;

 

     /**

      * 显示顺序

      **/

     private Integer orderNum;

 

     /**

      * 用户状态(0:正常 1:禁用)

      **/

     private Integer status;

 

     @TableField (exist = false )

     private List<SysDeptEntity> children;

 

}

 2、拦截器MetaObjectHandler

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

/**

  * @author ShenTuZhiGang

  * @version 1.0.0

  * @date 2020-11-26 15:52

  */

@Slf4j

@Component

public class CustomMetaObjectHandler implements MetaObjectHandler {

     @Autowired

     private AuthenticationTrustResolver authenticationTrustResolver;

     @Override

     public void insertFill(MetaObject metaObject) {

         log.info( "come to insert fill ........." );

         this .setFieldValByName( "createTime" , LocalDateTime.now(), metaObject);

         this .setFieldValByName( "updateTime" , LocalDateTime.now(), metaObject);

         Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

         if (!authenticationTrustResolver.isAnonymous(authentication) && authentication!= null ){

             AuthenticationUser user = (AuthenticationUser) authentication.getPrincipal();

             this .setFieldValByName( "createUser" , user.getUsername(), metaObject);

             this .setFieldValByName( "updateUser" ,  user.getUsername(), metaObject);

         } else {

             this .setFieldValByName( "createUser" , "unknown" , metaObject);

             this .setFieldValByName( "updateUser" ,  "unknown" , metaObject);

         }

 

     }

 

     @Override

     public void updateFill(MetaObject metaObject) {

         log.info( "come to update fill ........." );

         this .setFieldValByName( "update_time" , LocalDateTime.now(), metaObject);

         Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

         if (!authenticationTrustResolver.isAnonymous(authentication) && authentication!= null ){

             AuthenticationUser user = (AuthenticationUser) authentication.getPrincipal();

             this .setFieldValByName( "updateUser" ,  user.getUsername(), metaObject);

         } else {

             this .setFieldValByName( "updateUser" ,  "unknown" , metaObject);

         }

     }

}

不需要以下代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

@Configuration

public class MyBatisPlusConfig {

 

     /**

      * 自动填充 功能

      * @return

      */

     @Bean

     public GlobalConfig globalConfig() {

         GlobalConfig globalConfig = new GlobalConfig();

         globalConfig.setMetaObjectHandler( new MetaHandler());

         return globalConfig;

     }

 

}

 3、测试

?

1

2

3

4

5

6

7

8

@RequiresPermissions ( "sys:dept:add" )

@PostMapping ( "/add" )

@ResponseBody

public R add( @RequestBody SysDeptEntity deptEntity) {

     logger.info( "添加信息={}" , deptEntity);

     sysDeptService.save(deptEntity); // 不再需要设置setCreateUser、setCreateTime、setUpdateUser、setUpdateTime操作,代码更优美

     return R.ok();

}

参考文章

使用MyBatis Plus自动添加数据库表中的创建时间、创建者、更新时间、更新者

mybatisPlus自动填充更新时间

mybatis-plus实战-时间字段自动更新

使用mybatis plus插入或更新数据时mysql表的添加时间和更新时间字段没有更新(mybatis plus坑之一)

到此这篇关于 MybatisPlus 插入或更新数据时自动填充更新数据解决方案的文章就介绍到这了,更多相关MybatisPlus 插入或更新自动填充内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://blog.csdn.net/weixin_43272781/article/details/110198852

查看更多关于MybatisPlus 插入或更新数据时自动填充更新数据解决方案的详细内容...

  阅读:39次