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配置文件当中

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource(数据源)" />
</bean>

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 <settings> or <typeAliases> 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 <mappers> section in the MyBatis config file. A second option is to use the mapperLocations property of the factory bean.

需要配置文件的另一个原因是MyBatis映射器XML文件与映射器类不在同一个类路径位置。对于这种配置,有两种选择。首先,使用MyBatis配置文件中的“<mappers>”部分手动指定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样式的模式,用于加载目录中的所有文件或从基位置递归搜索所有路径。例如:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="mapperLocations" value="classpath*:sample/config/mappers/**/*.xml" />
</bean>

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”属性:

<bean id="databaseIdProvider" class="org.apache.ibatis.mapping.VendorDatabaseIdProvider">
  <property name="properties">
    <props>
      <prop key="SQL Server">sqlserver</prop>
      <prop key="DB2">db2</prop>
      <prop key="Oracle">oracle</prop>
      <prop key="MySQL">mysql</prop>
    </props>
  </property>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="mapperLocations" value="classpath*:sample/config/mappers/**/*.xml" />
  <property name="databaseIdProvider" ref="databaseIdProvider"/>
</bean>

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配置文件。例如:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="configuration">
    <bean class="org.apache.ibatis.session.Configuration">
      <property name="mapUnderscoreToCamelCase" value="true"/>
    </bean>
  </property>
</bean>
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355