mybatis-spring配置applicationContext_dao.xml时mapper接口与mapper.xml路径不一致时解决方法

SqlSessionFactoryBean

In base MyBatis, the SqlSessionFactory is built using SqlSessionFactoryBuilder. In MyBatis-Spring, SqlSessionFactoryBean is used instead.

在基本的mybatis中,SqlSessionFactory对象是使用SqlSessionFactoryBuilder构建的,然而在mybatis-spring中,SqlSessionFactory则是使用SqlSessionFactoryBean构建

Setup

To create the factory bean, put the following in the Spring XML configuration file:

创建工厂bean,需要下面的语句添加到spring的xml配置文件当中


    

Note that SqlSessionFactoryBean implements Spring's FactoryBean interface (see the Spring documentation(Core Technologies -Customizing instantiation logic with a FactoryBean-)). This means that the bean Spring ultimately creates is not the SqlSessionFactoryBean itself, but what the factory returns as a result of the getObject() call on the factory. In this case, Spring will build an SqlSessionFactory for you at application startup and store it with the name sqlSessionFactory . In Java, the equivalent code would be:

注意:

SqlSessionFactoryBean 实现了spring的FactoryBean 接口(请参阅spring文档(Core Technologies使用FactoryBean 自定义实例化逻辑))

这意味着,spring最终创建的bean对象不是SqlSessionFactoryBean 本身,而是返回工厂调用getObject()方法生成的对象

在这情况下,spring会在程序启动时构建一个SqlSessionFactory ,并将其以sqlSessionFactory作为id存储

在java中,等效的代码如下:

@Bean
public SqlSessionFactory sqlSessionFactory() {
  SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
  factoryBean.setDataSource(dataSource());
  return factoryBean.getObject();
}

In normal MyBatis-Spring usage, you will not need to use SqlSessionFactoryBean or the corresponding SqlSessionFactory directly. Instead, the session factory will be injected into MapperFactoryBeans or other DAOs that extend SqlSessionDaoSupport .

在正常的mybatis-string用法中,将不需要直接使用SqlSessionFactoryBean 或着相应的SqlSessionFactory,取而代之的是 会话工厂 将会被注入MapperFactoryBeans 或者其他继承SqlSessionDaoSupport 的数据访问对象;

Properties

SqlSessionFactory has a single required property, the JDBC DataSource . This can be any DataSource and should be configured just like any other Spring database connection.

SqlSessionFactory有一个必需的属性JDBCDataSource。它可以是任何“DataSource”,并且应该像任何其他Spring数据库连接一样进行配置。

One common property is configLocation which is used to specify the location of the MyBatis XML configuration file. One case where this is needed is if the base MyBatis configuration needs to be changed. Usually this will be or sections.

一个公共属性是“configLocation”,用于指定MyBatis XML配置文件的位置。如果需要更改基本MyBatis配置,则需要这样做。通常这将是“设置”或“类型别名”部分。

Note that this config file does not need to be a complete MyBatis config. Specifically, any environments, data sources and MyBatis transaction managers will be ignored . SqlSessionFactoryBean creates its own, custom MyBatis Environment with these values set as required.

注意,这个配置文件不需要是一个完整的MyBatis配置。具体来说,任何环境、数据源和MyBatis事务管理器都将被忽略。SqlSessionFactoryBean创建自己的自定义MyBatisEnvironment并根据需要设置这些值。

Another reason to require a config file is if the MyBatis mapper XML files are not in the same classpath location as the mapper classes. With this configuration, there are two options. This first is to manually specify the classpath of the XML files using a section in the MyBatis config file. A second option is to use the mapperLocations property of the factory bean.

需要配置文件的另一个原因是MyBatis映射器XML文件与映射器类不在同一个类路径位置。对于这种配置,有两种选择。首先,使用MyBatis配置文件中的“”部分手动指定XML文件的类路径。第二个选项是使用factory bean的“mapperLocations”属性。

The mapperLocations property takes a list of resource locations. This property can be used to specify the location of MyBatis XML mapper files. The value can contain Ant-style patterns to load all files in a directory or to recursively search all paths from a base location. For example:

“mapperLocations”属性接受资源位置的列表。此属性可用于指定MyBatis XML映射器文件的位置。该值可以包含Ant样式的模式,用于加载目录中的所有文件或从基位置递归搜索所有路径。例如:


  
  

This will load all the MyBatis mapper XML files in the sample.config.mappers package and its sub-packages from the classpath.

`SqlSessionFactorThis将加载sample.config.mappers文件类路径中的包及其子包。

One property that may be required in an environment with container managed transactions is transactionFactoryClass . Please see the relevant section in the Transactions chapter.

在具有容器管理事务的环境中,可能需要一个属性“transactionFactoryClass”。请参阅交易章节中的相关章节。

In case you are using the multi-db feature you will need to set the databaseIdProvider property:

如果使用multi-db功能,则需要设置“databaseIdProvider”属性:


  
    
      sqlserver
      db2
      oracle
      mysql
    
  



  
  
  

NOTE Since 1.3.0, configuration property has been added. It can be specified a Configuration instance directly without MyBatis XML configuration file. For example:

注意从1.3.0开始,添加了“configuration”属性。它可以直接指定一个“Configuration”实例,而不需要MyBatis XML配置文件。例如:


  
  
    
      
    
  

image.png

你可能感兴趣的:(mybatis-spring配置applicationContext_dao.xml时mapper接口与mapper.xml路径不一致时解决方法)