5.API详解
Dao 中需要通过 SqlSession 对象来操作 DB。而 SqlSession 对象的创建,
需要其工厂对象 SqlSessionFactory。SqlSessionFactory 对象,
需要通过其构建器对象 SqlSessionFactoryBuilder 的 build()方法,在加载了主配置文件的输入流对象后创建
a)Resource类
Resources 类,顾名思义就是资源,用于读取资源文件。其有很多方法通过加载并解析 资源文件,返回不同类型的 IO 流对象。
b)SqlSessionFactoryBuilder
SqlSessionFactory 的创建,需要使用 SqlSessionFactoryBuilder 对象的 build()方法。由于
SqlSessionFactoryBuilder 对象在创建完工厂对象后,就完成了其历史使命,即可被销毁。
所以,一般会将该 SqlSessionFactoryBuilder 对象创建为一个方法内的局部对象,方法结束,对象销毁。
c)SqlSessionFactoy接口
SqlSessionFactory 接口对象是一个重量级对象(系统开销大的对象),是线程安全的,所 以一个应用只需要一个该对象即可。创建 SqlSession 需要使用 SqlSessionFactory 接口的的 openSession()方法。
- openSession(true):创建一个有自动提交功能的 SqlSession
- openSession(false):创建一个非自动提交功能的 SqlSession,需手动提交
- openSession():同 openSession(false)
d)SqlSession接口
SqlSession 接口对象用于执行持久化操作。一个 SqlSession 对应着一次数据库会话,
一次会话以 SqlSession 对象的创建开始,以 SqlSession 对象的关闭结束。
SqlSession 接口对象是线程不安全的,所以每次数据库会话结束前,需要马上调用其 close()方法,将其关闭。
再次需要会话,再次创建。而在关闭时会判断当前的 SqlSession 是 否被提交:若没有被提交,则会执行回滚后关闭;
若已被提交,则直接将 SqlSession 关闭。 所以,SqlSession 无需手工回滚。
SqlSession 封装了 各种 CRUD方法,当调用这些方法时,会去mapper.xml映射文件中去找相应标签下的SQL语句
e)源码分析
A、输入流的关闭
在输入流对象使用完毕后,不用手工进行流的关闭。因为在输入流被使用完毕后,
SqlSessionFactoryBuilder 对象的build() 方法会自动将输入流关闭
B、SqlSession的创建
无参的openSession()方法,将事务的自动提交直接赋值为false。
而所谓创建SqlSession,就是加载了主配置文件,创建了一个执行器对象(将来用于执行映射文件中的SQL语句)
初始化了一个DB数据被修改的标志变量dirty,关闭了事务的自动提交功能
C、增删改的执行
对于SqlSession的insert()、delete()、uodate()方法,其底层均是调用了update方法
从源码可知,无论执行增、删还是改,均是对数据进行修改,均将dirty变量设置为true
且在获取到映射文件中指定id的SQL语句后,由执行器executor执行
D、SqlSession的提交 commit()
执行了SqlSession的更新,dirty变量的值发生了变化,表示数据被修改了,此时进行SqlSeesion的提交,
才会顺利的让事务进行提交,在没有更新的情况下,是不会提交的
执行SqlSession的无参commit()方法,最终会将事务进行提交
E、SqlSession的关闭
执行了SqlSession的更新,dirty变量的值发生了变化,表示数据被修改了,此时进行SqlSeesion的关闭,
才会进行事务的回滚,恢复数据
若没有执行SqlSession的更新,dirty的值没有改变,
在SqlSession进行关闭时,会将事务回滚后关闭。所以,对于MyBatis程序,无需通过显示地对SqlSession进行回滚
所以:dirty变量是一个很关键的变量,它决定了 事务是否进行提交和回滚
5.API详解的更多相关文章
- Java 8 Stream API详解--转
原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...
- jqGrid APi 详解
jqGrid APi 详解 jqGrid皮肤 从3.5版本开始,jqGrid完全支持jquery UI的theme.我们可以从http://jqueryui.com/themeroller/下载我们所 ...
- hibernate学习(2)——api详解对象
1 Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...
- 网络编程socket基本API详解(转)
网络编程socket基本API详解 socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...
- 转】Mahout推荐算法API详解
原博文出自于: http://blog.fens.me/mahout-recommendation-api/ 感谢! Posted: Oct 21, 2013 Tags: itemCFknnMahou ...
- dom4j api 详解--XPath 节点详解
dom4j api 详解 http://871421448.iteye.com/blog/1546955 XPath 节点 http://www.w3school.com.cn/xpath/xpath ...
- 百度地图API详解之事件机制,function“闭包”解决for循环和监听器冲突的问题:
原文:百度地图API详解之事件机制,function"闭包"解决for循环和监听器冲突的问题: 百度地图API详解之事件机制 2011年07月26日 星期二 下午 04:06 和D ...
- 【Unity编程】Unity中关于四元数的API详解
本文为博主原创文章,欢迎转载,请保留出处:http://blog.csdn.net/andrewfan Unity中关于四元数的API详解 Quaternion类 Quaternion(四元数)用于计 ...
- SDN 网络系统之 Mininet 与 API 详解
SDN 网络系统之 Mininet 与 API 详解 Mininet 是轻量级的软件定义网络系统平台,同时提供了对 OpenFlow 协议的支持.本文主要介绍了 Mininet 的相关概念与特性,并列 ...
- Webdriver之API详解(1)
说明 Webdriver API详解,基于python3,unittest框架,driver版本和浏览器自行选择. 本内容需要对python3的unittest框架有一个简单的了解,这里不再赘述,不了 ...
随机推荐
- java.util.concurrent.DelayQueue 源码学习
jdk1.8 DelayQueue,带有延迟元素的线程安全队列,当非阻塞从队列中获取元素时,返回最早达到延迟时间的元素,或空(没有元素达到延迟时间).DelayQueue的泛型参数需要实现Delaye ...
- oracle 中SQL 语句开发语法 SELECT INTO含义
oracle 中SQL 语句开发语法 SELECT INTO含义 在ORACLE中SELECT INTO是如何使用的,什么意思?和SQL SERVER的不一样? 和sqlserver的不一样sql ...
- win10 Java JDK环境变量配置
注意下载JDK 版本不需太高(百度一下jdk下载就好了) 第一步 我们首先打开win10电脑的资源管理器,快捷键win+E 然后选中此电脑,鼠标右键在弹出的菜单中选中属性的按钮 第二步 看到窗口的 ...
- 【手记】解决Graphics.DrawImage带ImageAttributes在XP报内存不足的问题
异常信息: System.OutOfMemoryException: 内存不足. 在 System.Drawing.Graphics.CheckErrorStatus(Int32 status) 在 ...
- jenkins部署Vue项目 & 远程到远程服务
只是记录下自己是怎么配置的,方便自己以后要用的时候查阅 如果使用nodejs打包则需要上图中的脚本,nodejs只是把JavaScript代码去掉空格个换行变成不易于人阅读的方式 (为了方便复制而已, ...
- WPScan使用完整攻略:如何对WordPress站点进行安全测试
转载自FreeBuf.COM 严正声明:本文仅限于技术探讨,严禁用于其他目的. 写在前面的话 在这篇文章中,我将告诉大家如何使用WPScan来对WordPress站点进行安全测试. WPScan是Ka ...
- 【VS开发】文件共享内存2
在32位的Windows系统中,每一个进程都有权访问他自己的4GB(232=4294967296)平面地址空间,没有段,没有选择符,没有near和far指针,没有near和far函数调用,也没有内存模 ...
- IIS 6.0的web园 最大工作进程数细谈
这篇文章主要介绍了IIS 6.0的web园 最大工作进程数,需要的朋友可以参考下:(摘自:http://www.jb51.net/article/84817.htm) IIS 6.0允许将应用程序池配 ...
- 最新 完美世界java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.完美世界等10家互联网公司的校招Offer,因为某些自身原因最终选择了完美世界.6.7月主要是做系统复习.项目复盘.Leet ...
- elasticsearch基本概念理解+elasticsearch 的shards unassigned处理方法 -- 最佳运维实践 - 集群规划
1.es与MySQL的概念对比 2.概念理解 2.1 Index : 一个索引即是文档的集合 2.2 Document : 一个文档即是一个可被索引的基础单元信息,一条记录: 2.3 Replicas ...