Mybatis中SqlSessionFactory和SqlSession学习和原理
|
源码git地址:https://github.com/mybatis/mybatis-3 目标结构:
mybatis是数据持久化解决方案将用户从JDBC访问中解放出来,用户只需要定义需要操作的SQL语句,无需关注底层JDBC操作,就可以以面向对象的方式来进行持久层操作,底层数据库的连接获取,数据库访问的实现,事务控制等都无须用户关心。本章学习mybatis中的常见对象SqlSessionFactory和SqlSession 一、SqlSessionFactory SqlSessionFactory是mybatis的关键对象,它是单个数据库映射关系经过编译后的内存镜像,SqlSessionFactory可以通过SqlSessionFactoryBuild对象类获取,而SqlSessionFactoryBuild则可以从xml配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例,每一个mybatis的应用程序都以一个SqlSessionFactory对象的实例为核心,sqlSessionFactory也是线程安全的,SqlSessionFactory一旦被创建,在应用执行期间都存在,不宜重复创建多次,推荐使用单例模式,SqlSessionFactory是创建SqlSession的工厂。 SqlSessionFactory:接口源码 public interface SqlSessionFactory {
SqlSession openSession();//用来创建SqlSession
SqlSession openSession(boolean autoCommit);
SqlSession openSession(Connection connection);
SqlSession openSession(TransactionIsolationLevel level);
SqlSession openSession(ExecutorType execType);
SqlSession openSession(ExecutorType execType, boolean autoCommit);
SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level);
SqlSession openSession(ExecutorType execType, Connection connection);
Configuration getConfiguration();
}
在Spring中构建SqlSessionFactory: 通过@Bean配置一个DataSource类,构造一个SqlSessionFactoryBean实例通过setDataSource()将DataSource绑定,通过getObject()方法创建SqlSessionFactory对象 二、SqlSession SqlSession也是mybatis中的重要对象,是持久化操作的独享。类似于jdbc中的Connection,它是应用程序与持久层之间执行互操作的一个单线程对象,也是Mybatis执行持久化操作的关键对象,SqlSession对象完全包含以数据库为背景的所执行SQL操作方法。底层封装了JDBC连接,可以用SqlSession的实例对来执行被映射的SQL语句,每个线程有他自己的SqlSession实例,SqlSession的实例不能被共享,SqlSession也不是线程安全的,绝对不能将SqlSession实例的引用放在任何类型的管理范围中,使用完SqlSession之后关闭Session很重要,放在finally块来关闭它。 |
Mybatis中SqlSessionFactory和SqlSession学习和原理的更多相关文章
- 深入理解Mybatis中sqlSessionFactory机制原理
对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章将通过以下几点详细介绍MyBatis的初始化过程. 1.MyBatis的初始化做了什么 2. MyBatis基于XML配置 ...
- 阶段3 1.Mybatis_07.Mybatis的连接池及事务_5 mybatis中使用poolead配置连接的原理分析
idelConnection是空闲的链接 idelConnection就是ArrayList的数组 如果没有空闲的就new一个 新的connection 一个空闲池,一个活动的池,一个链接过来.空闲池 ...
- Mybatis中parameterType、resultMap、statementType等等配置详解(标签中基本配置详解)
一.(转自:https://blog.csdn.net/majinggogogo/article/details/72123185) 映射文件是以<mapper>作为根节点,在根节点中支持 ...
- Mybatis分页插件: pageHelper的使用及其原理解析
在实际工作中,很进行列表查询的场景,我们往往都需要做两个步骤:1. 查询所需页数对应数据:2. 统计符合条件的数据总数:而这,又会导致我们必然至少要写2个sql进行操作.这无形中增加了我们的工作量,另 ...
- 161102、MyBatis中批量插入
方法一: <insert id="insertbatch" parameterType="java.util.List"> <selectKe ...
- 深入理解mybatis原理, Mybatis初始化SqlSessionFactory机制详解(转)
文章转自http://blog.csdn.net/l454822901/article/details/51829785 对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章 ...
- MyBatis常用对象SqlSessionFactory和SqlSession介绍和运用
学习框架一个比较好的路径阅读源码.本文介绍的SqlSessionFactory和SqlSession.可以通过了解SqlSessionFactory接口和SqlSession接口以及两个的实现类入手, ...
- 【MyBatis学习13】MyBatis中的二级缓存
1. 二级缓存的原理 前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的.为了更加 ...
- 【MyBatis学习12】MyBatis中的一级缓存
缓存的作用是减轻数据库的压力,提高数据库的性能的.mybatis中提供了一级缓存和二级缓存,先来看一下两个缓存的示意图: 从图中可以看出: 一级缓存是SqlSession级别的缓存.在操作数据库时 ...
随机推荐
- TCP/IP基础总结性学习(5)
与 HTTP 协作的 Web 服务器 一台 Web 服务器可搭建多个独立域名的 Web 网站,也可作为通信路径上的中转服务器提升传输效率. 一. 用单台虚拟主机实现多个域名 HTTP/1.1 规范允许 ...
- Django【第11篇】:Django之分页升级版本(组件)
分页组件 一.分页的实现与使用 class Pagination(object): """ 自定义分页 """ def __init__(s ...
- 【Luogu4221】[WC2018] 州区划分
题目链接 题目描述 略 Sol 一个州合法就是州内点形成的子图中 不存在欧拉回路(一个点也算欧拉回路). 这个东西显然就状压 dp 一下: 设 \(f[S]\) 表示当前考虑了 \(S\) 这个集合内 ...
- [每日一讲] Python系列:字符串(上)
字符串作为人类最常处理的内容,在计算中决定了其占有重要的地位.在 Python 中,字符串的操作和处理往往需要根据实际问题,结合其他操作才可以完成目标.在复杂世界仅仅是字符串 API 还无法完成工作. ...
- linux运维、架构之路-Hadoop完全分布式集群搭建
一.介绍 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件 ...
- mysql LEFT JOIN关键字 语法
mysql LEFT JOIN关键字 语法 作用:LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行. 大理石构件 ...
- POJ 3764 The xor-longest Path ( 字典树求异或最值 && 异或自反性质 && 好题好思想)
题意 : 给出一颗无向边构成的树,每一条边都有一个边权,叫你选出一条路,使得此路所有的边的异或值最大. 分析 : 暴力是不可能暴力的,这辈子不可能暴力,那么来冷静分析一下如何去做.假设现在答案的异或值 ...
- 【bzoj3463】[COCI2012] Inspector
*题目描述: 在一个小国家中,一个新的小镇终于建成了!如往常一样,Mirko获得了“首席税务巡查员”的职位.他的任务是保证正确地计算各公司的收入情况.一共有N家办公室坐落在主干道上,从左到右被编号为1 ...
- Android使用命令行操作数据库
所有的应用程序本地文件都存放在/data/data/目录下 C:\Users\nicole>adb shell * daemon not running. starting it now on ...
- LinkedHashSet 源码分析
LinkedHashSet 1)底层由 LinkedHashMap 支持的 Set 接口实现,该 Set 中的元素具有可预知的迭代顺序. 创建实例 /** * 构造一个新的空 set,其底层 Link ...
