详情可见官方文档http://www.mybatis.org/spring/zh/index.html

一、需要配置的对象实例

1.SqlSessionFactoryBean

在 MyBatis-Spring配置中,SqlSessionFactoryBean 是用于创建 SqlSessionFactory 的。

要配置这个工厂 bean,放置下面的代码在 Spring 的 XML 配置文件中:


 <!-- 指定数据源和配置文件路径 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:com/mapping/*.xml"></property>
</bean>

要注意 SqlSessionFactory 需要一个 DataSource

2.DataSourceTransactionManager 事务管理器

要 开 启 Spring 的 事 务 处 理 , 在 Spring 的 XML 配 置 文 件 中 简 单 创 建 一 个 DataSourceTransactionManager 对象:

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

3.MapperFactoryBean

通过MapperFactoryBean指定对应的Dao层接口(也就是Mapper接口),还有sqlSessionFactory

MapperFactoryBean 创建的代理类实现了Mapper 接口,并且注入到应用程序中。

如果 Mapper 有一个对应的 MyBatis 的 XML 映射器文件, 如果 XML 文件在类路径的 位置和映射器类相同时, 它会被 MapperFactoryBean 自动解析。

<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

4.MapperScannerConfigurer

指定Dao层所在的包,以及sqlSessionFactoryBeanName

没有必要在 Spring 的 XML 配置文件中注册所有的映射器。

相反,你可以使用一个 MapperScannerConfigurer , 它将会查找类路径下所有的 映 射 器 并 自 动 将 它 们 创 建 成 MapperFactoryBean。

注 意 , 没 有 必 要 去 指 定 SqlSessionFactory 或 SqlSessionTemplate , 因 为 MapperScannerConfigurer 将会创建 MapperFactoryBean,之后自动装配。

但是,如果你使 用了一个以上的 DataSource ,那 么自动装配可能会失效 。这种 情况下 ,你可以使用 sqlSessionFactoryBeanName 或 sqlSessionTemplateBeanName 属性来设置正确的 bean 名 称来使用。

<!-- DAO接口所在包名,Spring会自动查找其下的类,并将其定义为一个Spring Bean --> 
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>

二、Mybatis中的重要对象

1.SqlSession

SqlSession是用于执行持久化操作的对象,类似于JDBC中的Connection。

它提供了面向数据库执行SQL命令所需的所有方法,可以通过SqlSession实例直接运行已映射的SQL语句。

SqlSession对应着一次数据库回话。

由于数据库会话不是永久的,因此SqlSession的生命周期也不应该是永久的。相反,在每次访问数据库时都需要创建它。

需要注意的是,每个线程都有自己的SqlSession实例,SqlSession实例不能被共享,也不是线程安全的。

因此最佳的作用域范围是request作用域或者方法体作用域内。

2.SqlSessionFactory。

每个数据库对应一个 SqlSessionFactory。
所以,如果你想连接两个数据库,你需要创建两个 SqlSessionFactory 实例。以此类推。

3,关于SqlSession,SqlSessionFactory,SqlSessionFactoryBean的关系。

Mybatis核心是获取 SqlSession 实例。

要获得 SqlSession 实例,则需要依赖 SqlSessionFactory 实例,通过openSession()方法获得。

而 SqlSessionFactory 是 SqlSessionFactoryBuilder 依据 MyBatis 配置文件中的数据源、Sql映射文件等信息来构建的。

在 MyBatis 中,SqlSessionFactory 的实例需要使用 SqlSessionFactoryBuilder 创建;

而在集成环境中,则可以使用 MyBatis-Spring 整合包中的 SqlSessionFactoryBean 来代替。

SqlSessionFactoryBean 封装了使用 SqlSessionFactoryBuilder 创建 SqlSessionFactory 的过程,

我们可以在 Spring 中以配置文件的形式,通过配置 SqlSessionFactoryBean 获得 SqlSessionFactory 实例。

源码细节,类似如下所示:

public class MybatisTest {
@Test
public void findUserByIdTest(){
InputStream inputStream=null;
SqlSession sqlSession=null;
try {
inputStream=Resources.getResourceAsStream("SqlMapConfig.xml");
//1.创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream);
//2.通过工厂得到SqlSession
sqlSession=factory.openSession();
//3.通过SqlSession操作数据库
User user=sqlSession.selectOne("test.findUserById", 1);
System.out.println(user.toString());
} catch (IOException e) {
e.printStackTrace();
}finally{
if(sqlSession!=null){
sqlSession.close();
}
if(inputStream!=null){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

三、示例如下:

spring-mybatis.xml示例如下:

<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 引入配置文件 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" >
<list>
<value>classpath:jdbc.properties </value>
<value>classpath:generator.properties </value>
</list> </property>
</bean> <!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- 初始化连接大小 -->
<property name="initialSize" value="${initialSize}"></property>
<!-- 连接池最大数量 -->
<property name="maxActive" value="${maxActive}"></property>
<!-- 连接池最大空闲 -->
<property name="maxIdle" value="${maxIdle}"></property>
<!-- 连接池最小空闲 -->
<property name="minIdle" value="${minIdle}"></property>
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="${maxWait}"></property>
</bean> <!-- 指定数据源和配置文件路径 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:com/mapping/*.xml"></property>
</bean> <!-- DAO接口所在包名,Spring会自动查找其下的类,并将其定义为一个Spring Bean -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean> <!-- (事务管理)transaction manager -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean> </beans>

Spring集成Mybatis配置文件的简单理解的更多相关文章

  1. Spring集成MyBatis配置文件

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  2. SSM框架开发web项目系列(五) Spring集成MyBatis

    前言 在前面的MyBatis部分内容中,我们已经可以独立的基于MyBatis构建一个数据库访问层应用,但是在实际的项目开发中,我们的程序不会这么简单,层次也更加复杂,除了这里说到的持久层,还有业务逻辑 ...

  3. spring集成mybatis配置多个数据源,通过aop自动切换

    spring集成mybatis,配置多个数据源并自动切换. spring-mybatis.xml如下: <?xml version="1.0" encoding=" ...

  4. MyBatis从入门到精通(第9章):Spring集成MyBatis(下)

    MyBatis从入门到精通(第9章):Spring集成MyBatis(下) springmvc执行流程原理 mybatis-spring  可以帮助我们将MyBatis代码无缝整合到Spring中.使 ...

  5. MyBatis从入门到精通(第9章):Spring集成MyBatis(中)

    MyBatis从入门到精通(第9章):Spring集成MyBatis(中) 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法.应该将应用自身的设计和具体 ...

  6. MyBatis从入门到精通(第9章):Spring集成MyBatis(上)

    MyBatis从入门到精通(第9章):Spring集成MyBatis(上) Spring是一个为了解决企业级Web应用开发过程中面临的复杂性,而被创建的一个非常流行的轻量级框架. mybatis-sp ...

  7. Spring集成MyBatis框架

    Java在写数据库查询时,我接触过四种方式: 1.纯Java代码,引用对应的数据库驱动包,自己写连接与释放逻辑(可以用连接池) 这种模式实际上性能是非常不错的,但是使用起来并不是非常方便:一是要手工为 ...

  8. Spring集成MyBatis的使用-使用SqlSessionTemplate

    Spring集成MyBatis的使用 Spring集成MyBatis,早期是使用SqlSessionTemplate,当时并没有用Mapper映射器,既然是早期,当然跟使用Mapper映射器是存在一些 ...

  9. Spring集成MyBatis的使用-使用Mapper映射器

    Spring集成MyBatis使用 前面复习MyBatis时,发现在测试时,需要手动创建sqlSessionFactory,Spring将帮忙自动创建sqlSessionFactory,并且将自动扫描 ...

随机推荐

  1. JSONP、CORS解决跨域问题

    一.为什么会有跨域问题? 是因为浏览器的同源策略是对ajax请求进行阻拦了,但是不是所有的请求都给做跨域,对href属性都不拦截. 二.解决跨域问题的两种方式 JSONP CORS 三.JSONP 先 ...

  2. Ubuntu下制作系统启动盘

    制作系统U盘: $ sudo umount /dev/sdc1 $ -desktop-amd64.iso of=/dev/sdc + records in + records out bytes (1 ...

  3. Promise的并行和串行

    Promise 并行 这个功能Promise自身已经提供,不是本文的重点.主要是依赖Promise.all和Promise.race. Promise.all是所有的Promise执行完毕后(reje ...

  4. 小数第n位

    问题描述 我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数. 如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式. 本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始 ...

  5. C#典型案例及分析

    1.简单工厂计算器

  6. .Net调用Java端带有WS-Security支持的Web Service各方案实战【转】

    原文:http://www.xuebuyuan.com/641669.html 到现在为止,我们AEP平台已经发布很长一段时间了,也有很多ISV接入并上线了,就语言而言,目前主要有三类:Java..N ...

  7. VMware 11 安装 Mac OS X10.10

    一.下载好以下软件--->http://pan.baidu.com/s/1qWDkTbe 1,VMware 11 2,unlocker203(装好VMware11后需要安装补丁unlocker才 ...

  8. macdown在mac OS 中的配置

    macdown 用命令行打开.md文件 执行两条命令即可. sudo echo "open -a MacDown \$*" > /usr/local/bin/macdown ...

  9. Jqmobile Secha Ionic比较

    1. Jqmobile 轻量级框架,它的语言基于 jquery 语言容易上手,运行速度快,但是没有 MVC 多人协作 开发的概念,项目比较大后 代码不易维护     (中小项目  1-2 个人开发很适 ...

  10. JSP动作指令

    JSP动作指令 动作指令与编译指令不间,编译指令是通知 Servlet 引擎的处理消息,而动作指令只是运行时的脚本动作.编译指令在将JSP 编译成 Servlet 时起作用:处理指令通常可替换成 Ja ...