使用MyBatis-Spring类库进行mybatis与spring整合

来源:互联网 发布:数据营销策略 编辑:程序博客网 时间:2024/05/21 20:25

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

1 0