package com.ruoyi.framework.config; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.sql.Timestamp; import java.util.Date; import java.util.Objects; import java.util.function.Supplier; /** * Mybatis 自动填充功能 * Mybatis 起始版本 3.3.0(推荐使用) * * @author ruoyi */ @Slf4j @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { log.info("自动填充-insert"); // 起始版本 3.3.0(推荐使用) this.strictInsertFill(metaObject, "createTime", Date.class, new Timestamp(System.currentTimeMillis())); this.strictInsertFill(metaObject, "operTime", Date.class, new Timestamp(System.currentTimeMillis())); this.strictInsertFill(metaObject, "loginTime", Date.class, new Timestamp(System.currentTimeMillis())); if (StringUtils.isNotNull(SecurityUtils.getAuthentication())) { this.strictInsertFill(metaObject, "createBy", String.class, SecurityUtils.getUsername()); } } @Override public void updateFill(MetaObject metaObject) { log.info("自动填充-update"); // 起始版本 3.3.0(推荐) this.strictUpdateFill(metaObject, "updateTime", Date.class, new Timestamp(System.currentTimeMillis())); if (StringUtils.isNotNull(SecurityUtils.getAuthentication())) { this.strictUpdateFill(metaObject, "updateBy", String.class, SecurityUtils.getUsername()); } } /** * 严格模式填充策略,默认有值不覆盖,如果提供的值为null也不填充 * modify-author: fsd * modify-issue: 重写strictFillStrategy方法,解决null值不自动填充问题 * * @param metaObject metaObject meta object parameter * @param fieldName java bean property name * @param fieldVal java bean property value of Supplier * @return this * @since 3.3.0 */ @Override public MetaObjectHandler strictFillStrategy(MetaObject metaObject, String fieldName, Supplier fieldVal) { Object obj = fieldVal.get(); if (Objects.nonNull(obj)) { metaObject.setValue(fieldName, obj); } return this; } }