mybatis与spring框架的整合网上有很多中方法,整合的过程中有些细节对于新手来说也是很麻烦的,俗话说
聪明的人就是帮懒惰的人更加懒
所以就有了mybatis-spring这个类库来帮助我们整合,实现mybatis代码无缝地整合到sprig中。首先要明白整合的具体思路:
- 让spring管理mybatis中的SqlSessionFactory
- 让spring管理mapper对象和dao
- 让spring管理数据库连接池
其实整合的过程主要是对文件结构以及spring的配置文件applicationContext.xml的配置。
其中配置文件重要包含的就是数据源、SqlSessionFactory、mapper和dao
数据源就不用多说了,这里主要的就是介绍下mybatis-spring中的SqlSessionFactoryBean和MapperFactoryBean
SqlSessionFactoryBean:
首先配置数据源使用spring-mybatis中的SqlSessionFactory来代替以前mybatis中的SqlSessionFactory,而且该bean实现了Spring中的FactoryBean接口。
在mybatis-spring中就不需要直接的去使用SqlSessionFactoryBean或者是对应的SqlSessionFactory
看下实例代码:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis.xml"></property>
<property name="dataSource" ref="dataSource"></property>
</bean>
它有两个配置属性:
1、DataSource:是spring数据库连接的一样的
2、configLocation:是用来指定mybatis的xml配置文件的路径,其中mybatis配置文件中的环境、数据源、和事务管理器都会被忽略,SqlSessionFactoryBean会创建它自己的,所以主要是用来包含其中的<settings>
或者是<typeAliases>
部分
在指定mybatis的mapper对象时候,使用这个配置有两种选择:
使用configLocation属性手动的在Mybatis的xml配置文件中使用
<mappers>
部分来指定类路径,如上面的代码所示使用bean的mapperLocations属性来加载一个目录中所有的mapper对象
比如:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="mapperLocations" value="classpath*:sample/config/mappers/**/*.xml" />
<property name="dataSource" ref="dataSource"></property>
</bean>
它会加载在 sample.config.mappers 包和它的子包中所有的 MyBatis 映射器 XML 文件。
MapperFactoryBean:
注入映射器,mybatis-spring也可以手工使用SqlSessionDaoSupport和SqlSessionTemplate来时数据访问对象(DAO),但是这里推荐使用MapperFactoryBean来动态的实现MapperFactoryBean,这样你使用映射器的时,直接像调用DAO一样就行了。
<bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="org.com.will.dao.UserDao"></property>
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
其中的属性主要是mapperInterface,去指定映射器,也就是dao接口。
属性sqlSessionFactory 用ref调用上面的SqlSessionFactoryBean,对dao和xml映射文件进行解析。
这里注意sqlSessionFactory属性的ref要与上面SqlSessionFactoryBean的id保持一致
如果要去注册多个映射器,一个个写出来太麻烦了,可以直接使用MapperScannerCongurer进行批量的的注册,它会自动的查找类路径下所有映射器并为它们创建MapperFactoryBean
MapperScannerConfigurer:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="org.mybatis.spring.sample.mapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
其中basePackage属性值可以使用分号或者是逗号作为分隔符来设置多个包路径
还有别忘记在applicationContext.xml文件中配置dao:
<bean id="userService" class="org.com.will.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>
这就是mybatis与spring整合的一些基本的内容。有些细节的东西可能没有说到。
具体可以到官方网站去看:http://www.mybatis.org/spring/zh/index.html
这里附上一个自己写的一个整合的简单例子源代码,可以参考下:http://download.csdn.net/detail/leoe_/9836717