MybatisPlus 插入或更新數據時自動填充更新數據解決方案
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、 實體類
/** * 基礎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<SysDeptEntity> 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 插入或更新自動填充內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 在MyBatisPlus中使用@TableField完成字段自動填充的操作
- Mybatis-Plus自動填充更新操作相關字段的實現
- mybatis plus樂觀鎖及實現詳解
- MyBatis-Plus實現字段自動填充功能的示例
- MyBatis-Plus自動填充功能失效導致的原因及解決