Spring与Mybatis的整合
一、在整合这两个框架之前需要了解的知识
1.Spring
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。两个重要模块:Spring 面向方面编程(AOP)和控制反转 (IOC) 容器。
控制反转模式(也称作依赖性介入)的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。
容器 (在 Spring 框架中是 IOC 容器) 负责将这些联系在一起。在典型的 IOC 场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法。
2.MyBatis
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。
MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
3. mybatis-spring版本支持的mybatis和spring的情况
在整合之前除了要了解前面的两个知识点之外,还需要知道mybatis-spring版本支持的mybatis和spring的情况。我曾经因为版本支持的问题,花掉了我半天的时间,所以我深刻地感受到对于一个知识不系统的看书学习,光是凭经验和积累,有时也是害人的。
因而,我建议先看一下mybatis官网上的介绍,网址如下:
http://www.mybatis.org/spring/zh/
先将网址上我以为要了解的摘抄如下:
What isMyBatis-Spring?
MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。 使用这个类库中的类, Spring 将会加载必要的 MyBatis 工厂类和 session 类。 这个类库也提供一个简单的方式来注入 MyBatis 数据映射器和 SqlSession 到业务层的 bean 中。
Requirements
在开始使用MyBatis-Spring 的整合之前,很重要的一点是,你要熟悉 Spring 和 MyBatis 这两个框架还有和它们有关的术语,本手册中不会提供二者的基本内容,安装和配置教程。
MyBatis-Spring要求Java5及以上版本还有下面列出的MyBatis和Spring版本:
MyBatis-Spring | MyBatis | Spring |
1.0.0 或 1.0.1 | 3.0.1 到 3.0.5 | 3.0.0 或以上 |
1.0.2 | 3.0.6 | 3.0.0 或以上 |
1.1.0 | 3.1.0 或以上 | 3.0.0 或以上 |
上面的表还没说清楚,进一步可以参考下面的网址:
http://mvnrepository.com/artifact/org.mybatis/mybatis-spring
这个网址是maven仓库,上面可以找到mybatis-spring上的jar包,并且说明对应支持的mybatis版本和spring的版本。下面截取几个图显示其支持的情况。
现在经常用的已经到了1.3.1,04 三月 2017年3月4日已经发布了1.3.2-SNAPSHOT,是个不稳定版,看上面的图,目前用的比较多的是1.3.0,本次就用这个版本。
MyBatis-Spring1.3.0支持mybatis和spring的情况。
从图中可以看出,其支持mybatis 3.4.0以上,支持spring4.2.5以上。
另外,上面两个网站都告诉了:如果使用 Maven,在 pom.xml 中加入下面的代码即可:
<dependency><groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>x.x.x</version> </dependency> |
比如:本次使用mybatis-spring 1.3.0,就将上面表格中x.x.x换成1.3.0。
二、整合步骤
由于会附上源代码,下面的步骤将比较简单。
1.使用MyEclipse建立一个Maven的WEB项目,弄一个名字:paperV01,如果不会,推荐看一篇博文,地址为:
http://blog.csdn.net/haishu_zheng/article/details/51490299
2.配置pom.xml
使用Maven来管理项目的好处,就是不需要自己去导入jar包,但我们要知道需要导入哪些jar包。以上建立项目后,会自动生成一个pom.xml文件,我们接下来的任务就是配置这个文件。
我们要用到的软件有:mybatis、spring、单元测试,JDBC驱动程序等等,需要在pom.xml中配置,让Maven去帮我们下载相应的jar包。
3.在mysql建立数据库
数据库的名称为:db_rbac,在建两个表,分别为:sys_user、sys_role
4.完成实体类、DAO接口、服务层接口、服务实现层
完成的结构图如下:
5.xml映射文件
6.Spring配置文件----ApplicationContext.xml
在MyBatis中,要连接数据库,还要创建session 工厂,其中,可以使用SqlSessionFactoryBuilder来创建session 工厂。而在MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来替代。这个bean可以通过一个线程安全的 SqlSession 来注入,基于Spring的事务配置来自动提交、回滚、关闭session。
在大多数情况下MapperFactoryBean, 将会在 bean 中注入所需要的映射器。
为了完成选择数据源和映射器的注入,也需要一个配置文件,取名为:ApplicationContext.xml,该文件的配置与注释如下:
<?xmlversion="1.0"encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
<!--引入jdbc.properties属性文件 -->
<context:property-placeholderlocation="classpath:jdbc.properties"/>
<!--定义一个jdbc数据源,创建一个驱动管理数据源的bean -->
<bean
id="jdbcDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property
name="driverClassName"
value="${jdbc.driver}"/>
<property
name="url"
value="${jdbc.url}"/>
<property
name="username"
value="${jdbc.username}"/>
<property
name="password"
value="${jdbc.password}"/>
</bean>
<!--创建一个sql会话工厂bean,指定数据源jdbcDataSource -->
<bean
id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<!--指定数据源 -->
<property
name="dataSource"
ref="jdbcDataSource"/>
<!--定位Mybatis的配置文件 -->
<property
name="configLocation"
value="classpath:config.xml"/>
</bean>
<!--MyBatis-Spring 提供了一个动态代理的实现:MapperFactoryBean。
这个类可以让你直接注入数据映射器接口到你的 service 层 bean 中。
当使用映射器时,你仅仅如调用你的 DAO 一样调用它们就可以了,但是你不需要编
写任何 DAO 实现的代码,因为MyBatis-Spring 将会为你创建代理。
MapperFactoryBean创建的代理类实现了UserMapper接口,并且注入到应用程序中。
因为代理创建在运行时环境中(Runtime,译者注) ,那么指定的映射器必须是一个接口,而不是一个具体的实现类。 -->
<bean
id="userMapper"
class="org.mybatis.spring.mapper.MapperFactoryBean">
<property
name="mapperInterface"
value="com.solo.base.mapper.UserMapper"/>
<property
name="sqlSessionFactory"
ref="sqlSessionFactory"/>
</bean>
<!--上面的映射器只有一个,如果多个或很多呢?可以使用一个MapperScannerConfigurer,它将会查找类路径下的映射器
并自动将它们创建成MapperFactoryBean,这样就没有必要在 Spring 的 XML 配置文件中注册所有的映射器。
basePackage属性是让你为映射器接口文件设置基本的包路径。你可以使用分号或逗号作为分隔符设置多于一个的包路径。
每个映射器将会在指定的包路径中递归地被搜索到。
要创建MapperScannerConfigurer,可以在 Spring 的配置中添加如下代码来代替上面的代码: -->
<!--<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.solo.base.mapper"></property>
</bean> -->
</beans>
7.MyBatis的配置文件------config.xml
8.编写单元测试
源码下载地址:
http://download.csdn.net/download/wxjwhqwy/10182550