网站内容自动更新( 2021年09月24日16:17:00更新时间)
优采云 发布时间: 2021-10-14 09:20网站内容自动更新(
2021年09月24日16:17:00更新时间)
MybatisPlus 在插入或更新数据时自动填充和更新数据
更新时间:2021年9月24日16:17:58 作者:Starzkg
本文主要介绍MybatisPlus在插入或更新数据时自动填充和更新数据的解决方案。文章中介绍的示例代码非常详细,具有一定的参考价值。有兴趣的朋友可以参考一下。
内容
马文
org.springframework.boot
spring-boot-starter-parent
2.2.6.RELEASE
com.baomidou
mybatis-plus-boot-starter
3.1.0
解决方案
1、 实体类
/**
* 基础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;
}
@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 children;
}
2、*敏*感*词*MetaObjectHandler
/**
* @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);
}
}
}
以下代码不是必需的:
@Configuration
public class MyBatisPlusConfig {
/**
* 自动填充功能
* @return
*/
@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插入或更新自动填充内容,请搜索脚本之家之前的文章或者继续浏览下面的相关文章,希望大家以后多多支持Scripthome!