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);
}
}