MyBatis 您所在的位置:网站首页 填充功能可以实现什么操作呢 MyBatis

MyBatis

2024-07-03 16:48| 来源: 网络整理| 查看: 265

本文基于 SpringBoot 在项目开发过程中,我们的数据库表中,经常不可避免的会出现一些公共字段,比如创建人信息、创建时间、修改人信息、修改时间等等相关信息,我们一般都是拿到当前操作人员 set 相关属性进行写入,或者利用 aop 、反射等相关技术进行处理,当我们使用了 MyBatis-Plus 之后,这一切就变得简单起来了

一、引入 MyBatis-Plus 1、引入相关依赖 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine org.projectlombok lombok true mysql mysql-connector-java 6.0.6 com.baomidou mybatis-plus-boot-starter 3.1.0 com.baomidou mybatis-plus-generator 3.1.0 2、SpringBoot 配置文件

数据库相关连接信息按自己的进行配置

mybatis-plus: #扫描所有xml mapper-locations: classpath:mapper/*.xml #扫描实体类 type-aliases-package: com.wxw.springboot_mybatisplus.MetaObject.entity #打印日志 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 二、准备相关实体类代码 1、基础实体类父类 @Data public class BaseEntity implements Serializable { /** * id */ @TableId(value = "id", type = IdType.AUTO) private String id; /** * 创建人 */ @TableField(value = "create_user_id", fill = FieldFill.INSERT) private String createUserId; /** * 创建人 */ @TableField(value = "create_user_code", fill = FieldFill.INSERT) private String createUserCode; /** * 创建时间 */ @TableField(value = "create_date", fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createDate; /** * 更新人 */ @TableField(value = "update_user_id", fill = FieldFill.UPDATE) private String updateUserId; /** * 更新人 */ @TableField(value = "update_user_code", fill = FieldFill.UPDATE) private String updateUserCode; /** * 更新时间 */ @TableField(value = "update_date", fill = FieldFill.UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date updateDate; /** * 是否删除 */ @TableField(value = "delete_flag", fill = FieldFill.INSERT) @TableLogic private String deleteFlag; }

在需要自动填充的字段上增加注解 @TableField(value = “delete_flag”, fill = FieldFill.INSERT) @TableField(value = “update_date”, fill = FieldFill.UPDATE)

value 是对应的字段名称 fill = FieldFill.INSERT 表示插入的时候进行操作

我们可以看 FieldFill 的源码,有如下几种选项 INSERT 表示插入的时候进行填充 UPDATE 表示修改的时候进行填充 INSERT_UPDATE 表示插入和修改的时候都进行填充 在这里插入图片描述

2、自定义公共填充类实现元对象处理器接口 /** * 自动填充公共字段 */ @Slf4j @Component public class BaseMetaObjectHandler implements MetaObjectHandler { private static final String ID = "id"; /** * 创建人员ID */ private static final String CREATE_USER_ID = "createUserId"; /** * 创建人员Code */ private static final String CREATE_USER_CODE = "createUserCode"; /** * 创建时间 */ private static final String CREATE_DATE = "createDate"; /** * 更新人ID */ private static final String UPDATE_USER_ID = "updateUserId"; /** * 更新人员code */ private static final String UPDATE_USER_CODE = "updateUserCode"; /** * 更新时间 */ private static final String UPDATE_DATE = "updateDate"; /** * 删除标记 */ private static final String DELETE_FLAG = "deleteFlag"; /** * 新增 */ @Override public void insertFill(MetaObject metaObject) { log.info("start insert fill ...."); setFieldValByName(CREATE_USER_ID, "1", metaObject); setFieldValByName(CREATE_USER_CODE, "admin", metaObject); // 创建时间 setFieldValByName(CREATE_DATE, new Date(), metaObject); // 删除标记 setFieldValByName(DELETE_FLAG, "0", metaObject); } @Override public void updateFill(MetaObject metaObject) { log.info("start update fill ...."); // 更新用户 setFieldValByName(UPDATE_USER_ID, "123", metaObject); setFieldValByName(UPDATE_USER_CODE, "admin", metaObject); setFieldValByName(UPDATE_DATE, new Date(), metaObject); } }

类上增加注解 @Component 表示 此类加入 Spring 的管理,如果不加此注解,也可以通过注入 bean 的形式进行注入

当我们实现元对象处理器接口之后,我们可以重写接口中的两个方法 insertFill 和 updateFill 分别对插入时需要填充的公共字段 和 修改时需要填充的公共字段做处理,我这里只是简单的填充一些测试数据,可以按照自己的实际情况惊醒填充,比如拿到 security 中的用户进行填充或者拿到 session 中的用户进行填充等等,都可以

注意: 1、setFieldValByName 方法中,例如 UPDATE_DATE 等字段,必须使用驼峰转换之后的字段名,比如 update_date , 这里就是 updateDate,否则,在填充的时候不会报错,但是填充的数据就会一直是 null,所以这里的字段名必须要对应 2、需要填充的字段,必须要有 get 和 set 方法,否则也是会填充不进去的,我这里是在基础实体的父类中使用了 lombok 的 @data 注解来实现 get 和 set 3、如果填充的字段,一直都填充的是 null,请检查填充的字段和数据库字段是否没有对应上

三、测试自动填充 1、写两个接口测试插入以及修改

在这里插入图片描述

2、使用 postman 调用测试

测试插入 在这里插入图片描述 可以看到控制台输出的 sql 有插入我们在公共填充接口中填充的数据 在这里插入图片描述

测试修改 在这里插入图片描述 在这里插入图片描述

关注公众号查看更多资源 在这里插入图片描述 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有