网站内容自动更新( 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!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线