package com.fcb.car.biz.infra.component;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.odianyun.user.client.model.dto.AuthorityDto;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* 填充
*
* @author yqf
* @since 2021-04-02
*/
@Primary
@Component
@Slf4j
public class FillMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
if (null == this.getFieldValByName("createTime", metaObject)) {
this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);
}
if (null == this.getFieldValByName("lastUpdateTime", metaObject)) {
this.setFieldValByName("lastUpdateTime", LocalDateTime.now(), metaObject);
}
if (null == this.getFieldValByName("isDeleted", metaObject)) {
this.setFieldValByName("isDeleted", 0, metaObject);
}
AuthorityDto authorityDto = (AuthorityDto)AuthorityDto.AuthorityThreadLocal.get();
if (authorityDto != null && authorityDto.getUserInfo() != null && authorityDto.getUserInfo().getUserId() != null) {
if (null == this.getFieldValByName("createBy", metaObject)) {
this.setFieldValByName("createBy", authorityDto.getUserInfo().getUserId() + "", metaObject);
}
if (null == this.getFieldValByName("updateBy", metaObject)) {
this.setFieldValByName("updateBy", authorityDto.getUserInfo().getUserId() + "", metaObject);
}
}
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("lastUpdateTime", LocalDateTime.now(), metaObject);
AuthorityDto authorityDto = (AuthorityDto)AuthorityDto.AuthorityThreadLocal.get();
if (authorityDto != null && authorityDto.getUserInfo() != null && authorityDto.getUserInfo().getUserId() != null && null == this.getFieldValByName("updateBy", metaObject)) {
this.setFieldValByName("updateBy", authorityDto.getUserInfo().getUserId() + "", metaObject);
}
}
}
如果框架中有做处理,先删除
package com.fcb.car.biz.infra.component;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.stereotype.Component;
/**
* spring后置bean定义处理
* @author yqf
* @since 2021-04-06
*/
@Slf4j
@Component
public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) {
//覆盖框架中mybatis填充器
String beanName = "metaHandler";
// 先移除原来的bean定义
beanDefinitionRegistry.removeBeanDefinition(beanName);
// 注册我们自己的bean定义
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.rootBeanDefinition(FillMetaObjectHandler.class);
// 将Bean 的定义注册到Spring环境
beanDefinitionRegistry.registerBeanDefinition("fillMetaObjectHandler", beanDefinitionBuilder.getBeanDefinition());
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) {
}
}
实体类
package com.fcb.car.biz.domain.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* <p>
* 订单表 (成交记录表)
* </p>
*
* @author longmenglan
* @since 2021-04-08
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("car_order")
@ApiModel(value = "Order对象", description = "订单表 (成交记录表)")
public class Order extends Model<Order> {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键id")
@TableId(value = "id", type = IdType.ID_WORKER_STR)
private Long id;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
@ApiModelProperty(value = "更新时间")
@TableField(value = "last_update_time", fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime lastUpdateTime;
@TableLogic
@ApiModelProperty(value = "是否删除(0:未删除,1:已删除)")
@TableField("is_deleted")
private Integer isDeleted;
@ApiModelProperty(value = "备注")
@TableField("remark")
private String remark;
@ApiModelProperty(value = "创建人")
@TableField("create_by")
private String createBy;
@ApiModelProperty(value = "更新人")
@TableField("update_by")
private String updateBy;
}