第九章. Spring集成Mybaits
MyBatis-Spring可以帮助我们将Mybaits代码无缝整合到Spring中。使用这个类库中的类,Spring将会加载必要的Mybaits工厂类和Session类。这个类库也提供了一个简单的方式将Mybaits数据映射器和SqlSession注入到业务层的bean中,而且也可以处理事务,翻译Mybaits的异常到Spring的DataAccessException数据访问异常中。
applicationContext.xml
<bean id="dataSource" class="org.apache.ibatis.datasource.pooled.PooledDataSource">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</bean>
<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>
<!-- 这个配置不支持Ant风格的路径,当需要配置多个包路径时可以使用分号或逗号进行分隔。-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="addToConfig" value="true"/>
<!-- 可以使用分号和逗号作为分隔符设置多余一个的包路,每个映射器将会在指定的包路径中递归的被搜索到。-->
<property name="basePackage" value="tk.mybatis.**.mapper"/>
<!-- 用于过滤被扫描的接口,如果设置了该属性,那么Mybatis的接口中只有包含该注解才会被扫描进去。-->
<!--<property name="annotationClass" value=""/>-->
</bean>
mybatis-config.xml:
<?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>
spring-framework-bom是Spring的一个项目清单文件,由于集成Spring时需要添加很多Spring组件的依赖,为了避免使用不同版本的组件导致意外情况发生,可以使用spring-framework-bom。添加spring-framework-bom后,在使用Spring依赖时就不需要再配置每个依赖的版本号了,Spring组件的版本由spring-framework-bom统一管理。这不仅可以避免版本混乱引起的问题。还可以很方便的升级Spring的版本。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>4.3.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
具体参加mybatis-spring项目!
第十章. Spring Boot集成Mybaits
1. pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>simple</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
2. 配置Spring Boot主启动类扫描Mybatis的Mapper接口(通过@MapperScan注解)
@SpringBootApplication默认自动扫描其所在类的同级包以及子包(所以建议主启动类放在最外层的包名下)。为了让@SpringBootApplication扫描到simple-0.0.1-SNAPSHOT.jar中的mapper接口,需要借助@MapperScan注解来显示指定需要扫描的mapper包路径。
@SpringBootApplication
@MapperScan({"tk.mybatis.springboot.mapper", "tk.mybatis.simple.mapper"})
public class Application implements CommandLineRunner {
// 省略
}
3. 配置Spring Boot扫描Mybatis的xml映射文件
mybatis.mapper-locations=classpath:mapper/*.xml,classpath*:tk/**/mapper/*.xml
注:为了扫描到jar包中的xml映射文件,需要采用classpath*才能检索到!
4. mybatis其他配置选项
Mybatis Starter提供的所有可配置的属性都在org.mybatis.spring.boot.autoconfigure.MybatisProperties类中,该类部分代码如下:
@ConfigurationProperties(
prefix = "mybatis"
)
public class MybatisProperties {
public static final String MYBATIS_PREFIX = "mybatis";
private String configLocation;
private String[] mapperLocations;
private String typeAliasesPackage;
// 省略部分
@NestedConfigurationProperty
private Configuration configuration;
// 省略部分
Spring Boot可以通过@ConfigurationProperties注解自动将配置文件中的属性组装到对象上。这个注解一般都需要配置与属性匹配的前缀,此处前缀为"mybatis",因此对Mybatis的配置都是以"mybatis."作为前缀的。属性类中的字段如果是驼峰形式的,在配置文件中进行配置时建议改为横杠(-)和小写字母连接的形式,虽然Spring Boot仍然能正确匹配驼峰形式的属性。但是支持Spring Boot的IDE在自动提示时会使用标准的形式。例如configLocation在配置时应改写成mybatis.config-location的形式。
MybatisProperties并没有把所有的属性都列举出来,但是这个类提供了一个嵌套的Configuration属性,通过这种方式可以直接对Configuration对象进行属性配置。例如settings中的属性可以按照下面的方式进行配置。
mybatis.configuration.lazy-loading-enabled=true
mybatis.configuration.aggressive-lazy-loading=true
基本上大部分的配置都可以通过这种形式去实现,如果遇到不会配置的内容,仍然可以通过mybatis-config.xml方式去配置Mybatis,然后在Spring Boot配置中指定该文件的路径即可,示例如下:
mybatis.config-location=classpath:mybaits-config.xml