集成MyBatis

需要注意的是,在9.1节创建基本项目的时候就已经添加了 MyBatis 的依赖,这一节主要是介绍与 mybatis-spring 相关的内容。经过9.2节的集成后,我们已经准备了好了一个 Spring 和 Spring MVC 的基础环境,从这一节开始,便可以按照如下步骤集成 MyBatis 了。

  1. 在 pom.xml 中添加 mybatis-spring 依赖

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.0</version>
    </dependency>

    mybatis-spring 就是 MyBatis 和 Spring 集成中必须的依赖。此处使用 1.3.0 版本。

  2. 配置 SqlSessionFactoryBean

    在 MyBatis-Spring 中,SqlSessionFactoryBean 是用于创建 SqlSessionFactory 的。在 Spring 配置文件 applicationContext.xml 中配置这个工厂类,代码如下。

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations">
            <array>
                <value>classpath:tk/mybatis/**/mapper/*.xml</value>
            </array>
        </property>
        <property name="typeAliasesPackage" value="tk.mybatis.web.model"/>
    </bean>

    在配置 SqlSessionFactoryBean 时,用到了最常用的几个属性配置,这几个属性的介绍如下。

    • configLocation:用于配置 mybatis 配置 XML 的路径,除了数据源外,对 MyBatis 的各种配置仍然可以通过这种方式进行,并且配置 MyBatis settings 时只能使用这种方式。上面配置的 mybatis-config.xml 位于 src/main/resources 目录下,配置文件内容如下。

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE configuration
              PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-config.dtd">
      <configuration>
      	<settings>
              <setting name="logImpl" value="LOG4J"/>
              <setting name="cacheEnabled" value="true"/>
              <setting name="mapUnderscoreToCamelCase" value="true"/>
              <setting name="aggressiveLazyLoading" value="false"/>
      	</settings>
      </configuration>
    • dataSource:用于配置数据源,该属性为必选项,必须通过这个属性配置数据源,这里使用了上一节中配置好的 dataSource 数据库连接池。

    • mapperLocations:配置 SqlSessionFactoryBean 扫描 XML 映射文件的路径,可以使用 Ant 风格的路径进行配置。

    • typeAliasesPackage:配置包中类的别名,配置后,包中的类在 XML 映射文件中使用时可以省略包名部分,直接使用类名。这个配置不支持 Ant 风格的路径,当需要配置多个包路径时可以使用分号或逗号进行分隔。

    除了上面几个常用的属性外,SqlSessionFactoryBean 还有很多其他可以配置的属性,如果需要用到这些属性,可以直接查看 SqlSessionFactoryBean 的源码来了解每项属性及配置用法。

  3. 配置 MapperScannerConfigurer

    在以往和 Spring 集成的项目中,可能会有许多直接使用 SqlSession 的代码,或者使用了 Mapper 接口但是需要自己实现接口的用法。这些用法在 iBATIS 时期或者比较老的 MyBatis 项目中存在。这里要介绍的用法是最简单且推荐使用的一种,通过 MapperScannerConfigurer 类自动扫描所有的 Mapper 接口,使用时可以直接注入接口。

    在 Spring 配置文件 applicationContext.xml 中配置扫描类,代码如下。

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="addToConfig" value="true"/>
        <property name="basePackage" value="tk.mybatis.**.mapper"/>
    </bean>

    MapperScannerConfigurer 中常配置以下两个属性。

    • basePackage:用于配置基本的包路径。可以使用分号或逗号作为分隔符设置多于一个的包路径,每个映射器将会在指定的包路径中递归地被搜索到。

    • annotationClass:用于过滤被扫描的接口,如果设置了该属性,那么 MyBatis 的接口只有包含该注解才会被扫描进去。