其他分享
首页 > 其他分享> > Mybatis-Plus和mybatis共存,createtime和updatetime自动填充功能失效

Mybatis-Plus和mybatis共存,createtime和updatetime自动填充功能失效

作者:互联网

SqlSessionFactory

使用 MyBatis 首先是使用配置或者代码去生产 SqlSessionFactory,而 MyBatis 提供了构造器 SqlSessionFactoryBuilder。在 MyBatis 中,既可以通过读取配置的 XML 文件的形式生成 SqlSessionFactory,也可以通过 Java 代码的形式去生成 SqlSessionFactory。每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的,而 SqlSessionFactory 唯一的作用就是生产 MyBatis 的核心接口对象 SqlSession,所以它的责任是唯一的。

在共存的时候,还会发现mybatis-plus自动填充功能也失效了,那么我们就需要手动的去注入我们的handler了,比如我们常用的createtime和updatetime,加了注解,但是就是不走我们自定义的handler方法,如何解决

    @Primary
    @Bean(name = "thirdpartySqlSessionFactory")
    public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("thirdpartyDataSource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        sessionFactory.setPlugins(new Interceptor[]{new PaginationInterceptor()});

        // 加上这一行,MybatisHandler是我们自定义的handler
        sessionFactory.setGlobalConfig(new GlobalConfig().setMetaObjectHandler(new MybatisHandler()));
        return sessionFactory.getObject();
    }

 

    /**
     * 规则创建时间
     */
    @TableField(value = "create_time",fill = FieldFill.INSERT)
    private LocalDateTime  createTime;

    /**
     * 规则修改时间
     */
    @TableField(value = "update_Time",fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime  updateTime;

 

package cn.testin.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;


@Component
public class MybatisHandler implements MetaObjectHandler {

    /**
     * 添加时走以下方法,更新和创建时间字段不需要传值,自动生成
     *
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        // 创建时间和更新时间都插入
        Object created = getFieldValByName("createTime", metaObject);
        if (null == created) {
            // 字段为空,可以进行填充
            setFieldValByName("createTime", LocalDateTime.now(), metaObject);
        }

        Object updated = getFieldValByName("updateTime", metaObject);
        if (null == updated) {
            // 字段为空,可以进行填充
            setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
        }


    }

    /**
     * 更新时走以下方法,更新和创建时间字段不需要传值,自动生成
     *
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        // 如果不更新创建时间,那么传过来的创建时间为null
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
    }

}

 

标签:updatetime,SqlSessionFactory,metaObject,sessionFactory,MyBatis,Plus,LocalDateTim
来源: https://blog.csdn.net/lclcsdnblink/article/details/116304340