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级别的缓存.在操作数据库时 ...
随机推荐
- springboot+HttpInvoke 实现RPC调用
开始用springboot2+hession4实现RPC服务时,发现第一个服务可以调用成功,但第二个就一直报 '<' is an unknown code.第一个服务还是可以调用的.参考网上的方 ...
- POJ 3741 Raid (平面最近点对)
$ POJ~3741~Raid $ (平面最近点对) $ solution: $ 有两种点,现在求最近的平面点对.这是一道分治板子,但是当时还是想了很久,明明知道有最近平面点对,但还是觉得有点不对劲. ...
- django之表单类
一:表单类 一般我们在html中自己写的表单类似于下面的样子 <!DOCTYPE html> <html lang="en"> <head> & ...
- apply()的使用
apply()方法的另一种使用,就是可以代替一次for循环 在封装 document.getElementsByTagName的时候,需要把伪数组转为一个真的数组,其是也不是真的数组 typeof 出 ...
- sass、less中的scoped属性
1.scoped 的实现原理 Vue中的Less 中的 scoped 属性的效果主要是通过 PostCss 实现的.代码示例: //编译前 <template> <div class ...
- HDU 3613 Best Reward ( 拓展KMP求回文串 || Manacher )
题意 : 给个字符串S,要把S分成两段T1,T2,每个字母都有一个对应的价值,如果T1,T2是回文串,那么他们就会有一个价值,这个价值是这个串的所有字母价值之和,如果不是回文串,那么这串价值就为0.问 ...
- codevs 3060 抓住那头奶牛 x
3060 抓住那头奶牛 USACO 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description 农夫约翰被告知一头逃跑奶牛的位置,想要立 ...
- [CSP-S模拟测试]:木叶下(图论)
题目传送门(内部题77) 输入格式 第一行一个整数$n$,表示原先的树的点数接下来$n-1$行每行两个整数$a,b$,表示原先的树上的$n-1$条边,保证这$n-1$条边形成一棵树. 接下来一行一个整 ...
- 重新理解了重定向,利用重定向可以防止用户重复提交表单(兼谈springmvc重定向操作)
自己用springmvc框架有一段时间了,但是都还一直分不清楚什么时候应该用转发,什么时候应该用重定向.可能用转发的情形太多了,以致于自己都忘记了还有重定向. 当用户提交post请求之后,刷新页面就会 ...
- hashcode、equals、HashMap间的关系
1.从Object说起package com.hallo.collection; public class ObjectDemo { public static void main(String[] ...
