MyBatis-Puls插入或修改时某些字段自动填充操作示例

 更新时间:2023年12月11日 08:52:28   作者:不语  
这篇文章主要为大家介绍了MyBatis-Puls插入或修改时某些字段自动填充操作示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

介绍

在开发中,某些字段需要在插入或修改时自动被填充进数据库,如创建者,修改者等。

MyBatis-Puls提供了 MetaObjectHandler 接口,通过重写其中的 insertFill 与 updateFill 方法,实现在 新增 or 修改 时 动态的拿到实体类,在向实体类中 set 数据完成每次 新增或修改时自动填充数据 如 创建者、修改者这种数据在实体类上加注解 @TableField(fill = FieldFill.XXXXXX) 选择进入insert时填充还是update时填充,还是都填充

样例

Handler实现类

/**
 * MP注入处理器
 *
 * @author 
 * @date 2021/4/25
 */
@Slf4j
public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        try {
            if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) {
                BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject();//获得当前要进行sql操作的实体类
                Date current = ObjectUtil.isNotNull(baseEntity.getCreateTime())
                    ? baseEntity.getCreateTime() : new Date();
                baseEntity.setCreateTime(current);
                baseEntity.setUpdateTime(current);
                String username = StringUtils.isNotBlank(baseEntity.getCreateBy())
                    ? baseEntity.getCreateBy() : getLoginUsername();
                // 当前已登录 且 创建人为空 则填充
                baseEntity.setCreateBy(username);
                // 当前已登录 且 更新人为空 则填充
                baseEntity.setUpdateBy(username);
            }
        } catch (Exception e) {
            throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED);
        }
    }
    @Override
    public void updateFill(MetaObject metaObject) {
        try {
            if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) {
                BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject();//获得当前要进行sql操作的实体类
                Date current = new Date();
                // 更新时间填充(不管为不为空)
                baseEntity.setUpdateTime(current);
                String username = getLoginUsername();
                // 当前已登录 更新人填充(不管为不为空)
                if (StringUtils.isNotBlank(username)) {
                    baseEntity.setUpdateBy(username);
                }
            }
        } catch (Exception e) {
            throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED);
        }
    }
    /**
     * 获取登录用户名
     */
    private String getLoginUsername() {
        LoginUser loginUser;
        try {
            loginUser = LoginHelper.getLoginUser();
        } catch (Exception e) {
            log.warn("自动注入警告 => 用户未登录");
            return null;
        }
        return ObjectUtil.isNotNull(loginUser) ? loginUser.getUsername() : null;
    }
}

实体类

/**
 * Entity基类
 *
 * @author
 */
@Data
public class BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 搜索值
     */
    @JsonIgnore
    @TableField(exist = false)
    private String searchValue;
    /**
     * 创建者
     */
    @TableField(fill = FieldFill.INSERT) //创建时自动填充
    private String createBy;
    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    /**
     * 更新者
     */
    @TableField(fill = FieldFill.INSERT_UPDATE) //创建 or 修改时自动填充
    private String updateBy;
    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    /**
     * 请求参数
     */
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    @TableField(exist = false)
    private Map<String, Object> params = new HashMap<>();
}

以上就是MyBatis-Puls插入或修改时某些字段自动填充操作示例的详细内容,更多关于MyBatis Puls插入修改自动填充的资料请关注脚本之家其它相关文章!

相关文章

  • Spring 使用 feign时设置header信息的操作

    Spring 使用 feign时设置header信息的操作

    这篇文章主要介绍了Spring 使用 feign时设置header信息的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 流式图表拒绝增删改查之框架搭建过程

    流式图表拒绝增删改查之框架搭建过程

    这篇文章主要为大家介绍了流式图表拒绝增删改查之框架搭建过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Mybatis 入参类型方式全面详解

    Mybatis 入参类型方式全面详解

    这篇文章主要为大家介绍了Mybatis入参的类型方式全面示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • 一篇文章带你搞定JAVA内存泄漏

    一篇文章带你搞定JAVA内存泄漏

    今天小编就为大家分享一篇关于Java内存泄漏问题处理方法经验总结,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2021-07-07
  • 浅入浅出的讲解Spring循环依赖问题

    浅入浅出的讲解Spring循环依赖问题

    循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环,下面这篇文章主要给大家介绍了关于Spring循环依赖问题的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-10-10
  • Java Spring IOC图文详解

    Java Spring IOC图文详解

    IoC是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则。下面通过本文给大家分享spring中ioc的概念,感兴趣的朋友一起看看吧
    2021-09-09
  • Spring AOP操作的相关术语及环境准备

    Spring AOP操作的相关术语及环境准备

    这篇文章主要为大家介绍了Spring AOP操作的相关术语及环境准备学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • springboot使用filter获取自定义请求头的实现代码

    springboot使用filter获取自定义请求头的实现代码

    这篇文章主要介绍了springboot使用filter获取自定义请求头的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • 一步步教你把SpringBoot项目打包成Docker镜像

    一步步教你把SpringBoot项目打包成Docker镜像

    Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化,下面这篇文章主要给大家介绍了关于SpringBoot项目打包成Docker镜像的相关资料,需要的朋友可以参考下
    2023-02-02
  • SpringBoot使用@Async注解处理异步事件的方法

    SpringBoot使用@Async注解处理异步事件的方法

    在现代应用程序中,异步编程已经成为了必备的技能,异步编程使得应用程序可以同时处理多个请求,从而提高了应用程序的吞吐量和响应速度,在SpringBoot 中,我们可以使用 @Async 注解来实现异步编程,本文将介绍 @Async 注解的使用方法和注意事项
    2023-09-09

最新评论