Spring整合MyBatis

       前言

        作为Bean容器,Spring框架提供了IoC机制,可以接管所有组件创建工作并进行依赖管理。因而整合主要工作就是把MyBatis使用中所涉及的核心组件配置到Spring中,交给Spring来创建管理。业务逻辑对象依赖基于MyBatis技术实现的DAO对象,核心是获取SqlSession实例。要获取SqlSession实例,需要依赖SqlSessionFactory实例。而SqlSessionFactory是SqlSessionFactoryBuilder依据MyBatis配置文件中的数据源、SQL映射文件等信息构建的。


Spring整合MyBatis的第一步

1) 在项目中加入Spring、MyBatis及整合相关的JAR文件。除了添加原有的MyBatis和Spring中的JAR文件还需添加一个 mybatis-spring-1.2.0.jar

2) 配置实体类、数据持久化的DAO接口、MyBatis相关的XML文件以及SQL的映射文件。MyBatis中的xml文件中不允许再配置数据库连接的内容。


Spring整合MyBatis的第二步

1) 配置数据源

       对于任何持久化解决方案,数据库连接都是首先要解决的问题。在Spring中,数据源作为一个重要的组件可以单独进行配置和维护。
在Spring中配置数据源,首先要选择一种具体的数据源实现技术。目前流行的数据源实现有dbcp、c3p0、Proxool等。它们都实现了连接池功能。
dbcp数据源隶属于Apache Commons项目,使用dbcp数据源。需要下载并在项目中添加commons-dbcp-1.4.jar和commons-pool-1.6.jar

2) 配置SqlSessionFactoryBean

       在MyBatis中,SqlSessionFactory的实例需要SqlSessionFactoryBuilder创建;而在集成环境中,可使用MyBatis-Spring整合包的SqlSessionFactoryBean代替。
SqlSessionFactoryBean封装了SqlSessionFactoryBuilder创建SqlSessionFactory的过程。在Spring中以配置文件的形式配置SqlSessionFactoryBean获得SqlSessionFactory实例

3) 使用MapperScannerConfigurer注入映射器

       MyBatis-Spring提供了MapperScannerConfigurer,可以扫描指定包中的接口并将它们直接注册为MapperFactoryBean。前提必须是接口和Mapper.xml文件同名。如果不同名需要在之前的SqlSessionFactoryBean的Bean中进行匹配。

<!--加载配置文件-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:data.properties"/>
</bean>
<!--设置数据库连接参数-->
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
     <property name="driverClassName" value="${driver}"/>
     <property name="url" value="${url}"/>
     <property name="username" value="${username}"/>
     <property name="password" value="${password}"/>
 </bean>
<!--引用连接bean-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="classpath:mysqlbatis.xml"/>
    <property name="mapperLocations">
        <value>classpath:com/dao/**/*.xml</value>
    </property>
</bean>
<!--扫描指定包,mapper,接口与xml结合-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.dao"/>
</bean>