与jpa

时间:2017-10-09 14:55:17

标签: spring jpa mybatis

我在同一个项目中使用带有默认配置的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>

1 个答案:

答案 0 :(得分:1)

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