mybatisplus自动填充字段,如创建时间和更新时间

发布时间 2023-10-16 16:13:15作者: 群狼之龙

1. 在数据库对应的DO里面加注解

/**
 * 创建时间
 */
@TableField(value = "create_time",fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")//日期格式化
private Date createTime;

/**
 * 更新时间
 */
@TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")//日期格式化
private Date updateTime;

  

 2.需要定义一个组件,实现MetaObjectHandler接口中定义的方法

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {




    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}

 3.修改配置使自定义的组件MyMetaObjectHandler 生效,因为mybatisplus默认生效的是不填充

  黄色部分是新增使MyMetaObjectHandler 生效的代码

@Bean(name = "businessSqlSessionFactory")
    public SqlSessionFactory businessSqlSessionFactory(@Qualifier("tradeDataSource") DataSource masterDataSource)
            throws Exception {
        MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
        sessionFactory.setDataSource(masterDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(DruidDataSourceConfiguration.MAPPER_LOCATION));
        //全局配置
        GlobalConfig globalConfig  = new GlobalConfig();
        //配置填充器
        globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());
        sessionFactory.setGlobalConfig(globalConfig);

        return sessionFactory.getObject();
    }