首先SqlSessionFactory与SqlSession都是同一个接口

SqlSessionFactory是通过SqlSessionFactoryBuilder的build方法创建的

而build方法创建的是一个SqlSessionFactory的实现类,叫DefaultSqlSessionFactory

然后这个实现类主要用的设计模式是建造者(build)模式,而里面最终要达到的一个目的是为了创建出DefaultSqlSession,这个是SqlSession的实现类.

前面说了SqlSession也是同一个接口,那么SqlSession=SqlSessionFactory.openSession()就相当于SqlSession=DefaultSqlSession这个实现类.

那么这个实现类是干什么的呢?这个实现类可以进行增删查改以及事务操作等.

那么DefaultSqlSession是怎么进行这些操作的呢?答:通过调用Executor执行器.

所以,咱们平时见到的SqlSession.select()等等其实是在操作DefaultSqlSession.select()的方法,而DefaultSqlSession的方法其实也不是就能够实现对数据库进行操作的,而是通过调用Executor执行器来执行

而Executor执行器其实也是一个接口,而在解析配置文件的时候已经解析出来SQL,那么根据一路传过来的SQL以及参数等信息,Executor再调度StatementHandler等对象对数据库进行增删查改操作.

总结:现在你应该明白了吧,其实我们看到的都是表面,你认为的SqlSession能进行数据库操作其实不是的,是它的实现类再调用底层的Executor,底层的Executor再调度相关数据库操作对象才搞定的,

SqlSessionFactory是MyBatis的关键对象,它是个单个数据库映射关系经过编译后的内存镜像.SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象类获得,而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例.每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心.同时SqlSessionFactory也是线程安全的,SqlSessionFactory一旦被创建,应该在应用执行期间都存在.在应用运行期间不要重复创建多次,建议使用单例模式.SqlSessionFactory是创建SqlSession的工厂.

//SqlSessionFactory接口源码如下所示:package org.apache.ibatis.session;import java.sql.Connection;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();}

Mybatis框架中SqlSessionFactory相关推荐

  1. mybatis框架中的queryWrapper的or查询,联想到MySQL中and 和or的关系

    统计的原生SQL应该是这样的: SELECTCOUNT( 1 ) FROMtable_name WHERE( id = '679135XXXXXXX1212' AND ( STATUS = 1 OR ...

  2. Idea中Spring整合MyBatis框架中配置文件中对象注入问题解决方案

    运行环境:Spring框架整合MaBitis框架 问题叙述: 在Spring配置文件applicationContext-mybatis.xml中配置好mybatis之后 <?xml versi ...

  3. mybatis mysql 事务处理_详解Java的MyBatis框架中的事务处理

    一.MyBatis单独使用时,使用SqlSession来处理事务: public class MyBatisTxTest { private static SqlSessionFactory sqlS ...

  4. java中mapper层作用_Java的MyBatis框架中Mapper映射配置的使用及原理解析

    Mapper的内置方法model层就是实体类,对应数据库的表.controller层是Servlet,主要是负责业务模块流程的控制,调用service接口的方法,在struts2就是Action.Se ...

  5. Mybatis框架中是如何获取到SQL语句的,让我们一起来模拟一下吧

    本文主要是通过代理和反射来模拟Mybatis此ORM框架是如何获得SQL语句及相关参数等.当我们拿到这些东西,那么一切就变得很简单啦,想做啥就做啥啦. 与君共勉

  6. mybatis框架中的mapper.xml文件中的头部代码

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-/ ...

  7. 自己手写一个Mybatis框架(简化)

    继上一篇手写SpringMVC之后,我最近趁热打铁,研究了一下Mybatis.MyBatis框架的核心功能其实不难,无非就是动态代理和jdbc的操作,难的是写出来可扩展,高内聚,低耦合的规范的代码.本 ...

  8. 从 0 开始手写一个 Mybatis 框架,三步搞定!

    最近研究了一下Mybatis,给大家磕叨磕叨,MyBatis框架的核心功能其实不难,无非就是动态代理和jdbc的操作,难的是写出来可扩展,高内聚,低耦合的规范的代码.本文完成的Mybatis功能比较简 ...

  9. 一个connection对象可以创建一个或一个以上的statement对象_从 0 开始手写一个 Mybatis 框架,三步搞定...

    来自:开源中国,作者:我叫刘半仙 链接:https://my.oschina.net/liughDevelop/blog/1631006 MyBatis框架的核心功能其实不难,无非就是动态代理和jdb ...

最新文章

  1. ATS插件开发中内存泄露问题的解决方法探讨
  2. java 9宫格抽奖_前端js实现九宫格模式抽奖(多宫格抽奖)
  3. java使用原始套接字技术进行数据包截获_Linux零拷贝技术,看完这篇文章就懂了...
  4. 【备忘录】使用mongodb,报db.collection is not a function
  5. java 线程 wait 一定要同步_Java 线程中调用wait为什么一定要在同步代码块中?
  6. EF CodeFirst的步骤
  7. 电脑测速软件_网速慢,怎么办,教你测速,教你解决方案
  8. 程序员(工作2年)立flag,面四家,成三家,最后进了蚂蚁.....
  9. 微信小程序 +第三方 直播-IM在线聊天
  10. Git 如何拉取 github 上的代码
  11. mac mini u盘安装系统_U盘安装系统教程
  12. ANSYS FLUENT软件基础介绍
  13. 学校固定资产管理系统由谁来做,云呐RFID固定资产管理系统
  14. 被裁掉的大龄程序员,为什么不联合起来成立一个专收大龄程序员的公司?
  15. 阿达的红外射频遥控盒子(一)
  16. 幼儿园小游戏:小兔种萝卜
  17. 认知计算Cognitive Computing 各章总结
  18. Python面试题解析之前端、框架和其他
  19. 2021上海物联网大会总结
  20. 并联串联混合的电压和电流_105节,串联电路和并联电路

热门文章

  1. css预处理器sass使用教程(多图预警)
  2. make: 警告:检测到时钟错误。您的创建可能是不完整的。
  3. Datapath综合代码规范(Verilog)
  4. QT 中textEdit 和 textBrowser 无法使用斜体及加粗等 解决办法
  5. MFC 双击控件 提示重载函数已存在
  6. c语言小数加分,求救:c语言课程设计 员工工资管理程序 有加分的。谢谢
  7. 第4章 Python 数字图像处理(DIP) - 频率域滤波12 - 选择性滤波 - 带阻
  8. 51单片机C语言led流水灯及数码管实现秒表
  9. AOP联盟通知类型和Spring编写代理半自动
  10. iOS 动画基础总结篇