在 MyBatis 中,SqlSession 是其核心接口。在 MyBatis 中有两个实现类,DefaultSqlSession 和 SqlSessionManager。

SqlSession是Mybatis的一个核心类,简单点就是执行sql的,Mybatis的一级缓存应该就在这个级别上的,实际上一级缓存在Executor中实现的,下个文章介绍。

先看看SqlSession中的方法

DefaultSqlSession 是单线程使用的,而 SqlSessionManager 在多线程环境下使用。SqlSession 的作用类似于一个 JDBC 中的 Connection 对象,代表着一个连接资源的启用。具体而言,它的作用有 3 个:

  • 获取 Mapper 接口。
  • 发送 SQL 给数据库。
  • 控制数据库事务。

先来掌握它的创建方法,有了 SqlSessionFactory 创建的 SqlSession 就十分简单了,如下所示。

SqlSession sqlSession = SqlSessionFactory.openSession();

注意,SqlSession 只是一个门面接口,它有很多方法,可以直接发送 SQL。它就好像一家软件公司的商务人员,是一个门面,而实际干活的是软件工程师。在 MyBatis 中,真正干活的是 Executor,我们会在底层看到它。

SqlSession 控制数据库事务的方法,如下所示。

//定义 SqlSession
SqlSession sqlSession = null;
try {// 打开 SqlSession 会话sqlSession = SqlSessionFactory.openSession();// some code...sqlSession.commit();    // 提交事务
} catch (IOException e) {sqlSession.rollback();  // 回滚事务
}finally{// 在 finally 语句中确保资源被顺利关闭if(sqlSession != null){sqlSession.close();}
}
这里使用 commit 方法提交事务,或者使用 rollback 方法回滚事务。因为它代表着一个数据库的连接资源,使用后要及时关闭它,如果不关闭,那么数据库的连接资源就会很快被耗费光,整个系统就会陷入瘫痪状态,所以用 finally 语句保证其顺利关闭。

Mybatis之SqlSession简析相关推荐

  1. Java中高级核心知识全面解析——Redis(集群【概述{主从复制、哨兵、集群化}、数据分区方案、节点通信机制、数据结构简析】)5

    目录 一.[集群]入门实践教程 1.Redis 集群概述 1)Redis 主从复制 2)Redis 哨兵 3)Redis 集群化 2.主从复制 1)主从复制主要的作用 2)快速体验 ①.第一步:本地启 ...

  2. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  3. 简析平衡树(三)——浅谈Splay

    前言 原本以为\(Treap\)已经很难了,学习了\(Splay\),我才知道,没有最难,只有更难.(强烈建议先去学一学\(Treap\)再来看这篇博客) 简介 \(Splay\)是平衡树中的一种,除 ...

  4. 基于libmad库的MP3解码简析

    基于libmad库的MP3解码简析  MAD (libmad)是一个开源的高精度 MPEG 音频解码库,支持 MPEG-1(Layer I, Layer II 和 LayerIII(也就是 MP3). ...

  5. 简析 .NET Core 构成体系

    简析 .NET Core 构成体系 Roslyn 编译器 RyuJIT 编译器 CoreCLR & CoreRT CoreFX(.NET Core Libraries) .NET Core 代 ...

  6. Python源码学习:内建类型简析并简析int对象

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 上一篇文章中已经大致分析了下,Python的启动执行流程,现在我们分析一下Pytho ...

  7. Python源码学习:启动流程简析

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> Python简介: python主要是动态语言,虽然Python语言也有编译,生成中 ...

  8. 简析TCP的三次握手与四次分手【转】

    转自 简析TCP的三次握手与四次分手 | 果冻想 http://www.jellythink.com/archives/705 TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇 ...

  9. ceph存储原理_Ceph存储引擎BlueStore简析

    前文我们创建了一个单节点的Ceph集群,并且创建了2个基于BlueStore的OSD.同时,为了便于学习,这两个OSD分别基于不同的布局,也就是一个OSD是基于3中不同的存储介质(这里是模拟的,并非真 ...

最新文章

  1. gitlab自带的Nginx与原Nginx冲突的解决方案
  2. object-c 队列
  3. react学习(70)--拼接方式
  4. 计算机组成原理——总线系统总结
  5. 作者:高翔(1984-),男,国防大学信息作战与指挥训练教研部博士后,主要研究方向为体系分析与超网建模。...
  6. jquery-入门-基本使用-选择器-转移
  7. f4 stm32 神经网络_STM32神经网络开发工具箱将AI技术引入边缘和节点嵌入式设备...
  8. 常见网站CSS样式重置
  9. Spring mvc 中 DispatcherServlet 的学习和理解
  10. 二.Windows I/O模型之异步选择(WSAAsyncSelect)模型
  11. php比赛票数造假算法,PHP可以修改概率的抽奖算法(例如转盘等,个人感觉蛮好用)...
  12. leg引擎适合什么系统的服务器,第一讲 LEG引擎服务端更新BLUE引擎
  13. 3t studio 导出数据_Studio 3T下操作MongoDB的基本命令(转载)
  14. 可测函数列的几乎一致收敛于几乎处处收敛
  15. groovy简单介绍
  16. css中reset属性详解,css中如何使用counter-reset属性
  17. 搭建SPA项目SPA项目中使用路由嵌套路由
  18. 2、java的应用领域
  19. 使用pnpm+vue-cli,出现报错:Error: command failed: pnpm install --reporter silent --shamefully-hoist
  20. BiLSTM+CRF(二)命名实体识别

热门文章

  1. oracle和sql server取第一条记录的区别以及rownum详解
  2. linux下rpm方式安装mysql(2012-5-12)
  3. ASP.NET MVC3书店--第五节 表单编辑(第二部分)(转)
  4. 偷学Office 2007之易用性改造
  5. halcon模板匹配学习(一) Matching 初印象
  6. CVTE2016校招试题摘选
  7. bean覆盖 springboot_SpringBoot中如何进行Bean配置
  8. 例说C#深拷贝与浅拷贝
  9. php实现姓名按首字母排序的类与方法
  10. TCP 之 RST 原因分析