MybatisPlus 插入或更新数据时自动填充更新数据解决方案
短信预约 -IT技能 免费直播动态提醒
Maven
<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、 实体类
@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;
}
@Data
@TableName("sys_dept")
public class SysDeptEntity extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableId
private Long deptId;
private Long parentId;
private String deptName;
private Integer orderNum;
private Integer status;
@TableField(exist = false)
private List<SysDeptEntity> children;
}
2、拦截器MetaObjectHandler
@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);
}
}
}
不需要以下代码:
@Configuration
public class MyBatisPlusConfig {
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setMetaObjectHandler(new MetaHandler());
return globalConfig;
}
}
3、测试
@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 插入或更新自动填充内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341