Skip to content

Commit 537fe85

Browse files
committed
fix for http://code.google.com/p/mybatis/issues/detail?id=559 : Overriding sqlSessionTemplate in MapperFactoryBean not working in certain circumstances
1 parent 682109c commit 537fe85

File tree

6 files changed

+81
-4
lines changed

6 files changed

+81
-4
lines changed

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@
4646
<email>[email protected]</email>
4747
</contributor>
4848

49+
<contributor>
50+
<name>Kay Huber</name>
51+
<email>[email protected]</email>
52+
</contributor>
53+
4954
<contributor>
5055
<name>Raj Nagappan</name>
5156
<email>[email protected]</email>

src/main/java/org/mybatis/spring/mapper/MapperScannerConfigurer.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -398,18 +398,29 @@ protected Set<BeanDefinitionHolder> doScan(String... basePackages) {
398398

399399
definition.getPropertyValues().add("addToConfig", MapperScannerConfigurer.this.addToConfig);
400400

401+
boolean explicitFactoryUsed = false;
401402
if (StringUtils.hasLength(MapperScannerConfigurer.this.sqlSessionFactoryBeanName)) {
402-
definition.getPropertyValues().add("sqlSessionFactory",
403-
new RuntimeBeanReference(MapperScannerConfigurer.this.sqlSessionFactoryBeanName));
403+
definition.getPropertyValues().add("sqlSessionFactory", new RuntimeBeanReference(MapperScannerConfigurer.this.sqlSessionFactoryBeanName));
404+
definition.getPropertyValues().add("sqlSessionTemplate", null);
405+
explicitFactoryUsed = true;
404406
} else if (MapperScannerConfigurer.this.sqlSessionFactory != null) {
405407
definition.getPropertyValues().add("sqlSessionFactory", MapperScannerConfigurer.this.sqlSessionFactory);
408+
definition.getPropertyValues().add("sqlSessionTemplate", null);
409+
explicitFactoryUsed = true;
406410
}
407411

408412
if (StringUtils.hasLength(MapperScannerConfigurer.this.sqlSessionTemplateBeanName)) {
409-
definition.getPropertyValues().add("sqlSessionTemplate",
410-
new RuntimeBeanReference(MapperScannerConfigurer.this.sqlSessionTemplateBeanName));
413+
if (explicitFactoryUsed) {
414+
logger.warn("Cannot use both: sqlSessionTemplate and sqlSessionFactory together. sqlSessionFactory is ignored.");
415+
}
416+
definition.getPropertyValues().add("sqlSessionTemplate", new RuntimeBeanReference(MapperScannerConfigurer.this.sqlSessionTemplateBeanName));
417+
definition.getPropertyValues().add("sqlSessionFactory", null);
411418
} else if (MapperScannerConfigurer.this.sqlSessionTemplate != null) {
419+
if (explicitFactoryUsed) {
420+
logger.warn("Cannot use both: sqlSessionTemplate and sqlSessionFactory together. sqlSessionFactory is ignored.");
421+
}
412422
definition.getPropertyValues().add("sqlSessionTemplate", MapperScannerConfigurer.this.sqlSessionTemplate);
423+
definition.getPropertyValues().add("sqlSessionFactory", null);
413424
}
414425
}
415426
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.mybatis.spring.submitted.autowire;
2+
3+
import static org.junit.Assert.assertNotNull;
4+
5+
import org.junit.Test;
6+
import org.springframework.context.support.ClassPathXmlApplicationContext;
7+
8+
public class AutowireTest {
9+
private ClassPathXmlApplicationContext context;
10+
11+
@Test
12+
public void shouldReturnMapper() {
13+
context = new ClassPathXmlApplicationContext("classpath:org/mybatis/spring/submitted/autowire/spring.xml");
14+
FooMapper bean = (FooMapper) context.getBean("fooMapper");
15+
assertNotNull(bean);
16+
}
17+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package org.mybatis.spring.submitted.autowire;
2+
3+
public interface FooMapper {
4+
public void executeBar();
5+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD MApper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3+
<mapper namespace="org.mybatis.spring.submitted.autowire.FooMapper">
4+
<update id="executeBar">
5+
</update>
6+
</mapper>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<beans xmlns="http://www.springframework.org/schema/beans"
3+
xmlns:context="http://www.springframework.org/schema/context"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://www.springframework.org/schema/beans
6+
http://www.springframework.org/schema/beans/spring-beans.xsd
7+
http://www.springframework.org/schema/context
8+
http://www.springframework.org/schema/context/spring-context.xsd"
9+
default-lazy-init="false">
10+
11+
<bean id="dataSource" class="org.hsqldb.jdbc.JDBCDataSource">
12+
<property name="url" value="jdbc:hsqldb:mem:autowire"/>
13+
</bean>
14+
15+
<bean id="sqlSessionFactoryA" class="org.mybatis.spring.SqlSessionFactoryBean">
16+
<property name="dataSource" ref="dataSource" />
17+
</bean>
18+
19+
<bean id="sqlSessionFactoryB" class="org.mybatis.spring.SqlSessionFactoryBean">
20+
<property name="dataSource" ref="dataSource" />
21+
</bean>
22+
23+
<bean id="sqlSessionTemplateA" class="org.mybatis.spring.SqlSessionTemplate">
24+
<constructor-arg index="0" ref="sqlSessionFactoryA"/>
25+
<constructor-arg index="1" value="SIMPLE"/>
26+
<constructor-arg index="2"><null/></constructor-arg>
27+
</bean>
28+
29+
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
30+
<property name="basePackage" value="org.mybatis.spring.submitted.autowire" />
31+
<property name="sqlSessionTemplate" ref="sqlSessionTemplateA" />
32+
</bean>
33+
</beans>

0 commit comments

Comments
 (0)