本文将手把手教你MyBatis如何整合Spring,这儿,笔者使用的MyBatis是MyBatis3.2.7这个版本,Spring是Spring4.2.4这个版本,读者只要学会这两个版本的框架整合之后,其他版本之间的整合就一通百通了。
整合思路
MyBatis整合Spring的思路如下:
- SqlSessionFactory对象应该放到Spring容器中作为单例存在;
- 传统dao的开发方式中,应该从Spring容器中获得SqlSession对象;
- Mapper代理形式中,应该从Spring容器中直接获得Mapper的代理对象;
- 数据库的连接以及数据库连接池事务管理都要交给Spring容器来完成。
整合需要的jar包
MyBatis整合Spring所需的jar包如下:
- Spring的jar包;
- MyBatis的jar包;
- Spring与MyBatis的整合包,即
mybatis-spring-1.2.2.jar
; - MySQL数据库驱动jar包;
- 数据库连接池的jar包。
我整理出来的MyBatis与Spring整合的全部jar包(包括SpringMVC)有下面这些,一共31个jar包。
整合的步骤
接下来,我将按照下面整合的步骤来整合MyBatis与Spring:
- 第一步:创建一个普通的Java工程;
- 第二步:导入jar包(上面所提到的jar包);
- 第三步:编写MyBatis的配置文件(即SqlMapConfig.xml);
- 第四步:编写Spring的配置文件,在该配置文件中,可能需要进行如下配置:
- 数据库连接及连接池
- 事务管理(暂时可以不配置)
- SqlSessionFactory对象需要配置到Spring容器中
- Mapeer代理对象或者是dao层实现类需要配置到Spring容器中
- 第五步:编写dao层或者mapper.xml映射文件;
- 第六步:测试。
按照上面的步骤来整合MyBatis与Spring的话,一般来讲,MyBatis的核心配置文件(即SqlMapConfig.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>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="mybatis/user.xml" />
</mappers>
</configuration>
该核心配置文件处于工程中的如下图所示的位置。
Spring核心配置文件(即application-context.xml)的内容就应该是下面这个样子。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!-- 加载配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties" />
<!-- 数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}"<