ibatis 与 spring jpa 一起使用时更新缓慢

Slow updates in ibatis using together with spring jpa

我在同一个项目中使用默认配置的 spring jpa 和自定义配置的 spring-batis。 Jpa 查询总是很快,但 ibatis 查询有时很慢。有什么问题。我的 batis 配置:

import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.transaction.managed.ManagedTransactionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;


@Configuration
@EnableTransactionManagement
@MapperScan(basePackages = {""}, sqlSessionFactoryRef = "mySqlSessionFactory")
public class DaoConfig {
  @Value("${spring.datasource.url}")
  private String databaseUrl;

  @Value("${spring.datasource.username}")
  private String username;

  @Value("${spring.datasource.password}")
  private String password;

  @Value("${spring.datasource.driver-class-name}")
  private String driverClassName;

  @Value("${mybatis.mapperLocations}")
  private Resource[] mapperLocation;

  @Value("${mybatis.typeAliasesPackage}")
  private String typeAliasesPackage;

  private DataSource dataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource(databaseUrl, username, password);
    dataSource.setDriverClassName(driverClassName);
    return dataSource;
  }

  private ManagedTransactionFactory dataSourceTransactionManager() throws PropertyVetoException {
    return new ManagedTransactionFactory();
  }

  @Bean(name = "mySqlSessionFactory")
  public SqlSessionFactory mySqlSessionFactory() throws Exception {
    SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
    sessionFactory.setDataSource(dataSource());
    sessionFactory.setTransactionFactory(dataSourceTransactionManager());
    sessionFactory.setMapperLocations(mapperLocation);
    sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
    return sessionFactory.getObject();
  }
}

和依赖:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.0</version>
</dependency>

我认为您的 dataSource() 和 dataSourceTransactionManager() 方法也应该使用 @Bean 进行注释。如果没有它,每次调用 mySqlSessionFactory() 时都会建立一个新连接。