Mybatis之SqlSession简析
在 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简析相关推荐
- Java中高级核心知识全面解析——Redis(集群【概述{主从复制、哨兵、集群化}、数据分区方案、节点通信机制、数据结构简析】)5
目录 一.[集群]入门实践教程 1.Redis 集群概述 1)Redis 主从复制 2)Redis 哨兵 3)Redis 集群化 2.主从复制 1)主从复制主要的作用 2)快速体验 ①.第一步:本地启 ...
- 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析
目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...
- 简析平衡树(三)——浅谈Splay
前言 原本以为\(Treap\)已经很难了,学习了\(Splay\),我才知道,没有最难,只有更难.(强烈建议先去学一学\(Treap\)再来看这篇博客) 简介 \(Splay\)是平衡树中的一种,除 ...
- 基于libmad库的MP3解码简析
基于libmad库的MP3解码简析 MAD (libmad)是一个开源的高精度 MPEG 音频解码库,支持 MPEG-1(Layer I, Layer II 和 LayerIII(也就是 MP3). ...
- 简析 .NET Core 构成体系
简析 .NET Core 构成体系 Roslyn 编译器 RyuJIT 编译器 CoreCLR & CoreRT CoreFX(.NET Core Libraries) .NET Core 代 ...
- Python源码学习:内建类型简析并简析int对象
Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 上一篇文章中已经大致分析了下,Python的启动执行流程,现在我们分析一下Pytho ...
- Python源码学习:启动流程简析
Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> Python简介: python主要是动态语言,虽然Python语言也有编译,生成中 ...
- 简析TCP的三次握手与四次分手【转】
转自 简析TCP的三次握手与四次分手 | 果冻想 http://www.jellythink.com/archives/705 TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇 ...
- ceph存储原理_Ceph存储引擎BlueStore简析
前文我们创建了一个单节点的Ceph集群,并且创建了2个基于BlueStore的OSD.同时,为了便于学习,这两个OSD分别基于不同的布局,也就是一个OSD是基于3中不同的存储介质(这里是模拟的,并非真 ...
最新文章
- gitlab自带的Nginx与原Nginx冲突的解决方案
- object-c 队列
- react学习(70)--拼接方式
- 计算机组成原理——总线系统总结
- 作者:高翔(1984-),男,国防大学信息作战与指挥训练教研部博士后,主要研究方向为体系分析与超网建模。...
- jquery-入门-基本使用-选择器-转移
- f4 stm32 神经网络_STM32神经网络开发工具箱将AI技术引入边缘和节点嵌入式设备...
- 常见网站CSS样式重置
- Spring mvc 中 DispatcherServlet 的学习和理解
- 二.Windows I/O模型之异步选择(WSAAsyncSelect)模型
- php比赛票数造假算法,PHP可以修改概率的抽奖算法(例如转盘等,个人感觉蛮好用)...
- leg引擎适合什么系统的服务器,第一讲 LEG引擎服务端更新BLUE引擎
- 3t studio 导出数据_Studio 3T下操作MongoDB的基本命令(转载)
- 可测函数列的几乎一致收敛于几乎处处收敛
- groovy简单介绍
- css中reset属性详解,css中如何使用counter-reset属性
- 搭建SPA项目SPA项目中使用路由嵌套路由
- 2、java的应用领域
- 使用pnpm+vue-cli,出现报错:Error: command failed: pnpm install --reporter silent --shamefully-hoist
- BiLSTM+CRF(二)命名实体识别