集成MyBatis
需要注意的是,在9.1节创建基本项目的时候就已经添加了 MyBatis 的依赖,这一节主要是介绍与 mybatis-spring 相关的内容。经过9.2节的集成后,我们已经准备了好了一个 Spring 和 Spring MVC 的基础环境,从这一节开始,便可以按照如下步骤集成 MyBatis 了。
-
在 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 版本。
-
配置 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 的源码来了解每项属性及配置用法。
-
-
配置 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 的接口只有包含该注解才会被扫描进去。
-