> 文章列表 > mybatis plus 自动填充通用字段

mybatis plus 自动填充通用字段

mybatis plus 自动填充通用字段

1  创建 父类 

BaseDO    通用字段

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import org.apache.ibatis.type.JdbcType;import java.io.Serializable;
import java.time.LocalDateTime;/* 基础实体对象*/
@Data
public abstract class BaseDO implements Serializable {/* 创建者,目前使用 SysUser 的 id 编号 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。*/@TableField(value = "create_by",fill = FieldFill.INSERT, jdbcType = JdbcType.VARCHAR)private String createBy;/* 创建时间*/@TableField(fill = FieldFill.INSERT)private LocalDateTime createTime;/* 最后更新时间*/@TableField(fill = FieldFill.INSERT_UPDATE)private LocalDateTime updateTime;/* 更新者,目前使用 SysUser 的 id 编号 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。*/@TableField(fill = FieldFill.INSERT_UPDATE, jdbcType = JdbcType.VARCHAR)private String updateBy;@TableField(fill = FieldFill.INSERT_UPDATE, jdbcType = JdbcType.VARCHAR)private String sysOrgCode;/* 是否删除*/@TableLogicprivate Boolean delFlag ;public LocalDateTime getCreateTime() {return createTime;}public BaseDO setCreateTime(LocalDateTime createTime) {this.createTime = createTime;return this;}public LocalDateTime getUpdateTime() {return updateTime;}public void setUpdateTime(LocalDateTime updateTime) {this.updateTime = updateTime;}public String getCreateBy() {return createBy;}public void setCreateBy(String createBy) {this.createBy = createBy;}public String getUpdateBy() {return updateBy;}public void setUpdateBy(String updateBy) {this.updateBy = updateBy;}public String getSysOrgCode() {return sysOrgCode;}public void setSysOrgCode(String sysOrgCode) {this.sysOrgCode = sysOrgCode;}public Boolean getDelFlag() {return delFlag;}public void setDelFlag(Boolean delFlag) {this.delFlag = delFlag;}

2  各个实体类继承 BaseDO

3   创建类


import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
import com.baomidou.mybatisplus.extension.incrementer.H2KeyGenerator;
import com.baomidou.mybatisplus.extension.incrementer.KingbaseKeyGenerator;
import com.baomidou.mybatisplus.extension.incrementer.OracleKeyGenerator;
import com.baomidou.mybatisplus.extension.incrementer.PostgreKeyGenerator;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.jeecg.bpm.mybatis.mybatis.config.IdTypeEnvironmentPostProcessor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;/* MyBaits 配置类/
@Configuration
public class YudaoMybatisAutoConfiguration {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); // 分页插件return mybatisPlusInterceptor;}@Beanpublic MetaObjectHandler defaultMetaObjectHandler(){// 自动填充参数类return new DefaultDBFieldHandler();}@Bean@ConditionalOnProperty(prefix = "mybatis-plus.global-config.db-config", name = "id-type", havingValue = "INPUT")public IKeyGenerator keyGenerator(ConfigurableEnvironment environment) {DbType dbType = IdTypeEnvironmentPostProcessor.getDbType(environment);if (dbType != null) {switch (dbType) {case POSTGRE_SQL:return new PostgreKeyGenerator();case ORACLE:case ORACLE_12C:return new OracleKeyGenerator();case H2:return new H2KeyGenerator();case KINGBASE_ES:return new KingbaseKeyGenerator();}}// 找不到合适的 IKeyGenerator 实现类throw new IllegalArgumentException(StrUtil.format("DbType{} 找不到合适的 IKeyGenerator 实现类", dbType));}}
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.jeecg.bpm.mybatis.mybatis.core.dataobject.BaseDO;
import org.jeecg.bpm.util.WebFrameworkUtils;import java.time.LocalDateTime;
import java.util.Objects;/* 通用参数填充实现类 如果没有显式的对通用参数进行赋值,这里会对通用参数进行填充、赋值 @author hexiaowu*/
public class DefaultDBFieldHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {if (Objects.nonNull(metaObject) && metaObject.getOriginalObject() instanceof BaseDO) {BaseDO baseDO = (BaseDO) metaObject.getOriginalObject();LocalDateTime current = LocalDateTime.now();// 创建时间为空,则以当前时间为插入时间if (Objects.isNull(baseDO.getCreateTime())) {baseDO.setCreateTime(current);}// 更新时间为空,则以当前时间为更新时间if (Objects.isNull(baseDO.getUpdateTime())) {baseDO.setUpdateTime(current);}Long userId = WebFrameworkUtils.getLoginUserId();// 当前登录用户不为空,创建人为空,则当前登录用户为创建人if (Objects.nonNull(userId) && Objects.isNull(baseDO.getCreator())) {baseDO.setCreator(userId.toString());}// 当前登录用户不为空,更新人为空,则当前登录用户为更新人if (Objects.nonNull(userId) && Objects.isNull(baseDO.getUpdater())) {baseDO.setUpdater(userId.toString());}}}@Overridepublic void updateFill(MetaObject metaObject) {// 更新时间为空,则以当前时间为更新时间Object modifyTime = getFieldValByName("updateTime", metaObject);if (Objects.isNull(modifyTime)) {setFieldValByName("updateTime", LocalDateTime.now(), metaObject);}// 当前登录用户不为空,更新人为空,则当前登录用户为更新人Object modifier = getFieldValByName("updater", metaObject);Long userId = WebFrameworkUtils.getLoginUserId();if (Objects.nonNull(userId) && Objects.isNull(modifier)) {setFieldValByName("updater", userId.toString(), metaObject);}}
}