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

时间:2022-03-09 04:55:16

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