在进行springMVC和mybatis整合时,我们首先需要配置SqlSessionFactoryBean,为整合应用提供SqlSession对象资源。之后我们需要根据指定的Mapper接口生成Bean实例,这就需要我们配置MapperFactoryBean,其作用是根据Mapper接口获取我们想要的Mapper对象,它封装了原有的session.getMapper()功能的实现。
在定义MapperFactoryBean时,需要注入一下两个属性:
--SqlSessionFactoryBean对象,用于提供SqlSession
--要返回Mapper对象的Mapper接口
当我们需要扫描的对象是一个单一的mapper时,我们通常采用如下扫描配置:
<!-- 定义一:定义mapper -->
<bean id="deptMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.navinfo.model.DeptMapper"></property>
<!-- 指定SqlSessionFactoryBean对象 -->
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
如果大量的mapper,需要使用mybatis-spring.jar通过的MapperScannerConfigurer组件,通过这个组件可以自动扫描指定包下的各个Mapper接口,并注册对应的MapperFactoryBean对象。
把之前的MapperFactoryBean的配置注释掉,换成如下配置依然执行通过:
<!--方法2:
可以把扫描到的Mapper接口变成Mapper对象-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--指定要扫描包,该包内有多个Mapper 多个包的话,用逗号隔开。如value="com.navinfo.model1,com.navinfo.model2"-->
<property name="basePackage" value="com.navinfo.model" />
<!--指定sqlSessionFactory -->
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
但是在进行多配置源的配置时,有可能出现错误,
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class '${jdbc.driverClassName}'
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) .......
这时可以采用把之前的MapperFactoryBean的配置注释掉,换成如下配置依然执行通过:
Mybaits 使用多数据库源错误 --MapperScannerConfigurer配置 - linux,dev - 博客园 http://www.cnblogs.com/huapox/p/3516399.html所提供的方法进行配置
但是在我的程序中仍旧出现错误。
而在Mybatis MapperScannerConfigurer配置 Mybatis MapperScannerConfigurer配置的文章中指出在这里无需指定引用SqlSessionFactory,因为MapperScannerConfigurer在创建映射器时会通过自动装配的方式来引用。
此时错误可消除。