MyBatis与Spring整合
1.单独使用MyBatis
单独使用MyBatis,不结合其他框架,主要步骤是:
1.创建SqlSessionFactory对象
创建方法是通过SqlSessionFactoryBuilder这个类从mybatis的XML配置文件,或者porperties,或者URL获取相关数据库的配置信息。
2.从sqlSessionFactory获取SqlSession。
3.使用SqlSession提供的API,对数据库进行增删改查,以及事务管理。
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
session.insert("BlogMapper.selectBlog", 101);
session.commit();
sesssion.close();
2.结合Spring框架使用MyBatis
MyBatis + Spring的使用方式,一般是在Spring的配置文件里,配置以下内容:
1.数据源(DataSource)
2.SqlSessionFactoryBean,实现FactoryBean接口,通过注入DataSource对象,以及MyBatis的相关配置信息,返回SQLSessionFactory对象。
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/mysql"></jee:jndi-lookup>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
<property name="mapperLocations" value="classpath:mybatis/*/*.xml"></property>
</bean>
加入以上的配置信息就可以Dao类里,直接引用sqlSessionFactory这个对象,对数据库进行操作(跟1的代码一样)。
如果Dao的代码写多了,这时候会发现,每次的数据库操作,步骤都是要先
①获取SqlSession对象->②调用数据库操作的方法->③提交事务->④关闭SqlSession
其中①③④这三个步骤会一直环绕在每个Dao的方法里。
这时候会这么想,能否提供这样一个功能,在调用方法之前自动获取SqlSession对象,在调用方法之后自动提交事务和关闭SqlSession对象。这样①③④这样重复的代码就可以剔除了,整个Dao类的代码也变得更加简洁。
3.SqlSessionTemplate的应用
上面提到的,在调用方法之前和调用方法之后,各执行一些操作。这种技术一下子就联想到就是AOP编程方式。
AOP是Spring的第二个核心功能,所以自然它也提供了这样的是一个实现类,就是SqlSessionTemplate
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/mysql"></jee:jndi-lookup> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
<property name="mapperLocations" value="classpath:mybatis/*/*.xml"></property>
</bean> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory" />
</bean>
引入SqlSessionTemplate这个类,在写Dao时,每个方法,在执行之前,自动获取SqlSession对象,执行之后,自动提交事务和关闭会话。
public Object save(String str, Object obj) throws Exception {
return sqlSessionTemplate.insert(str, obj);
}
现在代码一下子变得更简洁了,只剩下数据操作的方法。
4.SqlSessionTemplate原理解析思路
为什么SqlSessionTemplate能够在每个方法,在执行之前,自动获取SqlSession对象,执行之后,自动提交事务和关闭会话。
要知道这个原理,其实相当于要了解Spring AOP原理。
要了解Spring AOP原理,就必须知道Java技术里,动态代理的原理。
Java的动态代理主要是涉及到JDK里java.lang.reflect包下的InvocationHandler接口和Proxy类里创建代理对象的方法。
SqlSessionTemplate的源码解析
SqlSessionTemplate的构造方法里,创建了一个SqlSession的代理对象。

在这个代理对象,每次SQLSession的方法被调用,都执行以下操作。

上面代码涉及到的知识点比较多,要完全理解,需要掌握下面列出的几点。
5.知识点归纳
1.MyBatis中的SqlSessionFactory和SqlSession
2.Spring中的SqlSessionFactoryBean和SqlSessionTemplate
3.Spring AOP原理
4.Java动态代理原理
5.Java反射原理
MyBatis与Spring整合的更多相关文章
- MyBatis学习(四)MyBatis和Spring整合
MyBatis和Spring整合 思路 1.让spring管理SqlSessionFactory 2.让spring管理mapper对象和dao. 使用spring和mybatis整合开发mapper ...
- Mybatis与Spring整合,使用了maven管理项目,作为初学者觉得不错,转载下来
转载自:http://www.cnblogs.com/xdp-gacl/p/4271627.html 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: mvn archetype ...
- Mybatis+struts2+spring整合
把student项目改造成ssm struts2 +mybatis+spring 1,先添加spring支持:类库三个,applicationContext.xml写在webinf下四个命名空间,监 ...
- mybatis与spring整合(基于配置文件)
本文主要介绍了如何将mybatis和spring整合在一起使用,本人使用的是mybatis3.05 + spring3.1.0M2 ,使用dbcp作为数据库连接池. 1.编写数据访问接口(UserDa ...
- mybatis与spring整合时读取properties问题的解决
在学习mybatis与spring整合是,想从外部引用一个db.properties数据库配置文件,在配置文件中使用占位符进行引用,如下: <context:property-placehold ...
- Spring+SpringMVC+MyBatis深入学习及搭建(九)——MyBatis和Spring整合
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6964162.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(八)--My ...
- Mybatis第五篇【Mybatis与Spring整合】
Mybatis与Spring整合 既然我们已经学了Mybatis的基本开发了,接下来就是Mybatis与Spring的整合了! 以下使用的是Oracle数据库来进行测试 导入jar包 aopallia ...
- MyBatis 与 Spring 整合
MyBatis-Spring 项目 目前大部分的 Java 互联网项目,都是用 Spring MVC + Spring + MyBatis 搭建平台的. 使用 Spring IoC 可以有效的管理各类 ...
- Mybatis(六) Spring整合mybatis
心莫浮躁~踏踏实实走,一步一个脚印,就算不学习,玩,能干嘛呢?人生就是那样,要找点有意思,打发时间的事情来做,而钻研技术,动脑动手的过程,还是比其他工作更有意思些~ so,努力啥的都是强迫自己做自以为 ...
- MyBatis学习(三)---MyBatis和Spring整合
想要了解MyBatis基础的朋友可以通过传送门: MyBatis学习(一)---配置文件,Mapper接口和动态SQL http://www.cnblogs.com/ghq120/p/8322302. ...
随机推荐
- 远程通知中app更新提示。
// // AppDelegate.m // SDJK // // Created by Jobs on 6/13/16. // Copyright (c) 2016 com.FlintInfo.dE ...
- iOS的UIDevice,NSBundle,NSLocale
iOS的APP的应用开发的过程中,有时为了bug跟踪或者获取用反馈的需要自动收集用 户设备.系统信息.应用信息等等,这些信息方便开发者诊断问题,当然这些信息是用户的非隐私信息,是通过开发api可以获取 ...
- IOS 学习之 iOS沙盒(sandbox) 介绍 沙盒机制 文件操作(一)
1.iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. ...
- 《The Evolution of Lua》翻译part 2
Lua2 1990年的时候,面向对象迈向巅峰,对于Lua没有面向对象的支持,我们受到了很大的压力.我们不想将Lua变成面向对象,因为我们不想“修复”一种编程范式(fix a programming p ...
- height与line-height的深入理解及应用
转载:原文地址:http://www.zhangxinxu.com/wordpress/?p=384 一.前言 前两天在腾讯ISD团队博客上看到一篇翻译的文章"深入理解css 行高" ...
- js 获取当前焦点所在的元素、给元素和input控件添加键盘监听事件、添加页面级的键盘监听事件
页面级的键盘监听事件 document.onkeydown = function (event) { var e = event || window.event || arguments.callee ...
- CvMat结构
一.创建矩阵的方式: 1.cvCreateMat(int rows,int cols,int type),Type可以使任何预定义类型.Type的写法规则:CV_<bit_depth>(S ...
- Adobe Flash builder 4的序列号
下载flex 4 之后,需要输入注册码(如果购买了正版就要选择第二个的单选框,无需输入注册码了) 1424-4258-9368-0713-8534-5128 1424-4806-8312-7960-9 ...
- Swift—下标脚本(Subscripts)
下标脚本可以定义在类(Class).结构体(Struct).枚举(enumeration)这些目标中,可以认为是访问集合,列表或序列的快捷方式,使用下标脚本的索引设置和获取值,不需要再调用实例的特定的 ...
- RestfulApi地址命名特点
get /orders 全部get /orders/{id} 根据id查找get /orders/{number} 根据编号查找get /orders/name/{name} 根据名称查找post / ...