[Spring MVC菜鸟之旅] Spring MVC 与 MyBatis整合

https://tuchong.com/1453100/13582509/

MyBatis

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

整合

MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。 使用这个类库中的类, Spring 将会加载必要的 MyBatis 工厂类和 session 类。 这个类库也提供一个简单的方式来注入 MyBatis 数据映射器和 SqlSession 到业务层的 bean 中。 而且它也会处理事务, 翻译 MyBatis 的异常到 Spring 的 DataAccessException 异常中。最终,它并 不会依赖于 MyBatis,Spring 或 MyBatis-Spring 来构建应用程序代码。

安装

要使用MyBatis,并且使用Maven来构建项目,则只需将下面的dependency代码置于pom.xml文件中:

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>

要和Spring一起使用MyBatis,我们需要在SPring应用上下文中定义至少两样东西:一个SqlSessionFactory 和至少一个数据映射器类。

从XML中构建SqlSessionFactory

在 MyBatis-Spring中,SqlSessionFactoryBean 是用于创建SqlSessionFactory的。要配置这个工厂bean,放置下面的代码在 Spring的XML配置文件中:

1
2
3
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>

要注意SqlSessionFactoryBean需要一个DataSource(数据源)。这可以是任意的DataSource,配置它就像配置其他的Spring数据库连接是一样的。

1
2
3
4
5
6
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>

创建数据映射器类

我们创建的数据映射器类如下:

1
2
3
4
public interface TestMapper {
@Select("SELECT * From auth_user WHERE id = #{id}")
Test getTest(@Param("id") long id);
}

然后用MapperFactoryBean将给接口加入到Spring中:

1
2
3
4
<bean id="testMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.springmvc.niklaus.dao.TestMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

注意所指定的映射器类必须是一个接口而不是具体的实现类。在这个实例中,注解被用来指定SQL语句,但是MyBatis的映射器XML文件也可以用,这个我将在下面再讲。

事务

一个使用MyBatis-Spring的主要原因是它允许MyBatis参与到Spring的事务管理中,而不是给MyBatis创建一个新的特定的事务管理器。

1
2
3
4
5
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />

要开始Spring的事务管理,要在Spring的XML配置文件中创建一个DataSourceTransactionManager对象,然后使用指定transactionManager作为事务管理器,支持事务注解(@Transactional),此时在需要事务管理的Service上使用@Transactional注解就可以了,只会查找和它在相同的应用上下文件中定义的bean上面的@Transactional注解。

1
2
3
4
5
6
7
8
9
10
11
12
@Service
@Transactional
public class TestServiceImpl implements TestService{
@Autowired
private TestMapper testMapper;
public Test getTestById(long id) {
return testMapper.getTest(id);
}
}

结语

先附上完整的MyBatis的配置XML文件spring-db.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="testMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.springmvc.niklaus.dao.TestMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>

这样,一个满足基本增删改查的Spring与MyBatis的整合应用就完成了,如果你想查看完整的项目代码,可以点击链接(SpringMVCRookie-dev-mybatis)

参考&引用

mybatis
mybatis-spring

更新时间

发布时间 : 2016-07-16

看你的了!