千家信息网

MybatisPlus如何实现插入或更新数据时自动填充更新数据

发表于:2024-10-19 作者:千家信息网编辑
千家信息网最后更新 2024年10月19日,这篇文章主要介绍MybatisPlus如何实现插入或更新数据时自动填充更新数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Maven org.springframewo
千家信息网最后更新 2024年10月19日MybatisPlus如何实现插入或更新数据时自动填充更新数据

这篇文章主要介绍MybatisPlus如何实现插入或更新数据时自动填充更新数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

    Maven

        org.springframework.boot    spring-boot-starter-parent    2.2.6.RELEASE          com.baomidou    mybatis-plus-boot-starter    3.1.0

    解决方案

    1、 实体类

    /** * 基础Bean */@Datapublic 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@Componentpublic 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);        }    }}

    不需要以下代码:

    @Configurationpublic class MyBatisPlusConfig {     /**     * 自动填充功能     * @return     */    @Bean    public GlobalConfig globalConfig() {        GlobalConfig globalConfig = new GlobalConfig();        globalConfig.setMetaObjectHandler(new MetaHandler());        return globalConfig;    } }

    3、测试

    @RequiresPermissions("sys:dept:add")@PostMapping("/add")@ResponseBodypublic R add(@RequestBody SysDeptEntity deptEntity) {    logger.info("添加信息={}", deptEntity);    sysDeptService.save(deptEntity); // 不再需要设置setCreateUser、setCreateTime、setUpdateUser、setUpdateTime操作,代码更优美    return R.ok();}

    以上是"MybatisPlus如何实现插入或更新数据时自动填充更新数据"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

    0