springboot 表格创建人,创建时间,修改人,修改时间等字段自动填充实现代码
代码一
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; @Component public class MetaHandler implements MetaObjectHandler { private static final String CREATE_TIME = "createTime"; private static final String CREATOR_ID = "creatorId"; private static final String UPDATE_TIME = "updateTime"; private static final String UPDATE_ID = "updateId"; /** * 新增数据执行 * @param metaObject */ @Override public void insertFill(MetaObject metaObject) { Long userId = 1L;// SecurityUtils.getUserId(); // this.setFieldValByName("createTime", new Date(), metaObject); // this.setFieldValByName("creatorId", userId, metaObject); // this.setFieldValByName("updateTime", new Date(), metaObject); // this.setFieldValByName("updateId", userId, metaObject); if (metaObject.hasGetter(CREATOR_ID) && metaObject.getValue(CREATOR_ID) == null) { this.setFieldValByName(CREATOR_ID, userId, metaObject); } if (metaObject.hasGetter(CREATE_TIME) && metaObject.getValue(CREATE_TIME) == null) { this.setFieldValByName(CREATE_TIME, new Date(), metaObject); } } /** * 更新数据执行 * @param metaObject */ @Override public void updateFill(MetaObject metaObject) { Long userId = 10L;// SecurityUtils.getUserId(); if (metaObject.hasGetter(UPDATE_TIME) && metaObject.getValue(UPDATE_TIME) == null) { this.setFieldValByName(UPDATE_TIME, new Date(), metaObject); } if (metaObject.hasGetter(UPDATE_ID) && metaObject.getValue(UPDATE_ID) == null) { this.setFieldValByName(UPDATE_ID, userId, metaObject); } } }
代码二
import com.baomidou.mybatisplus.core.config.GlobalConfig; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MyBatisPlusConfig { /** * 自动填充功能 * @return */ @Bean public GlobalConfig globalConfig() { GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setMetaObjectHandler(new MetaHandler()); return globalConfig; } }
代码三
import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import java.io.Serializable; import java.util.Date; @Data public class BaseEntity implements Serializable, Cloneable { private static final long serialVersionUID = 1L; @TableField(value = "creator_id", fill = FieldFill.INSERT) // 新增执行 private Long creatorId; @TableField(value = "create_time", fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; @TableField(value = "update_id", fill = FieldFill.UPDATE) // 新增和更新执行 private Long updateId; @TableField(value = "update_time", fill = FieldFill.UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updateTime; @Override public String toString() { return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE); } }
代码四 表中没有这些字段,过滤填充
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.xxxxx.BaseEntity; import lombok.Data; import java.util.Date; @Data @TableName("xxxdemo") public class xxxxdemo extends BaseEntity { private static final long serialVersionUID = 1L; /** $column.columnComment */ @TableId(type = IdType.ASSIGN_ID) private Long Id; /** $column.columnComment */ private Long xxxdeabc; /***/ private Integer abctestType; /** 内容(json) */ private String content; /** 描述 */ private String description; /** 以下字段,如果表中没有就添加,有则忽略**/ /*** *表中不存在的字段 修改时间 */ private transient Date updateTime; /*** *表中不存在的字段 修改人 */ private transient Long updateId; /*** *表中不存在的字段 创建时间 */ private transient Date createTime; /*** *表中不存在的字段 创建人 */ private transient Long creatorId; }
https://blog.csdn.net/weixin_34072159/article/details/92037114
https://gitee.com/baomidou/mybatisplus-spring-boot/issues/IKFLR
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
2016-06-24 this的面面观