Mybatis框架中SqlSessionFactory

首先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();}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是内连接查询?

查询信息的来源如果来自多张表,则必须对这些表进行连接查询。 连接是把不同表的记录连到一起的最普遍的方法,通过连接查询可将多个表作为一个表进行处理。 连接查询分为内连接和外连接。

cpu模拟器c语言实现_你写出来的C语言是这样调用硬件的!

大家都知道我们可以使用C语言写一段程序来控制硬件工作,但你知道其工作原理吗?网友北极C语言在实际运行中,都是以汇编指令的方式运行的,由编译器把C语言编译成汇编指令,CPU直接执行汇编指令。所以这个问题就变成&#…

apk瘦身

原文地址:http://blog.coderclock.com/2017/01/24/android/Android%E5%BA%94%E7%94%A8%E7%98%A6%E8%BA%AB%EF%BC%8C%E4%BB%8E18MB%E5%88%B012.5MB/ Android应用瘦身,从18MB到12.5MB 开篇语 前阵子老大交给了我一个任务,主要是帮我们开发的直播…

交叉连接(笛卡尔积)

一。什么是笛卡尔积(交叉连接) 交叉连接(Cross Join),又称“笛卡尔连接(Cartesian Join)”或“叉乘(Product)”,它是所有类型的内连接的基础。 如果把表视为…

oracle 安全备份与rman_Oracle 11g下使用RMAN进行备份和恢复操作(一)

备注:从10g版本起,log_archive_start 参数已经废弃,不用设置了。介绍:RMAN备份和恢复操作,要求数据库必须运行在归档模式下。本节先介绍如何开启数据库的归档模式。第一步:查看当前是否开启归档模式&#x…

java删除字符串最后一位

String s "1,2,3,4,5,6,7,8,";//目标:删除最后一个 ","s s.substring(0, s.length() - 1);System.out.println(s);

内连接查询的重点分析

一。概要 内连接基于连接谓词,它将两张表 ( 如A 和 B) 的列组合在一起,产生新的结果表。 内连接查询会将 A 表的每一行和 B 表的每一行进行比较,并找出满足连接谓词的组合。当连接谓词被满足,A 和 B 中匹配的行会按列组合&#x…

杨森翔的书法【斗方】

转载于:https://www.cnblogs.com/ysx4221/p/6568171.html

最后一条记录_幸好朋友圈没有访客记录。

以前玩QQ的时候,一定要开个黄钻。因为去偷窥喜欢的男孩的空间,非黄钻可以选择删除此条访问记录,但黄钻可以设置“对其隐身访问”。这样看完之后不仅没有了访客记录,就连在看的过程中也不会被发现。毕竟,我每次在他空间…

安卓UI测试(基于android studio环境 espresso框架)

用户登录界面测试&#xff0c;在新包里新建一个测试类如图 测试代码如下 1 public class AndroidTest {2 private static final String a "peter";3 Rule4 public ActivityTestRule<MainActivity> mActivityRule5 new ActivityTestR…

jmeter存储http请求返回参数_Jmeter接口测试之HTTP请求默认值(八)

原标题&#xff1a;Jmeter接口测试之HTTP请求默认值(八)不管是在UI级别的自动化测试还是在接口级别的自动化测试中&#xff0c;对公共数据数据的分离都是一种趋势&#xff0c;或者某种程度来说&#xff0c;这是自动化测试中必须要掌握的一种能力&#xff0c;是基本技能。这些公…

mybatis使用statement.getGenreatedKeys(); useGeneratedKeys=”true”;使用自增主键获取主键值策略和Oracle不支持自增,Oracle使用序列

parameterType: 参数类型&#xff0c; 可以省略 mysql支持自增主键&#xff0c;自增主键的获取&#xff0c; mybatis也是利用statement.getGenreatedKeys(); useGeneratedKeys”true”&#xff1b;使用自增主键获取主键值策略 keyProperty&#xff1b;指定对应的主键属性&…

Embeded linux之移植boa

一、解压 a) tar xvf boa-0.94.13.tar.gz 二、设置交叉编译工具 a) vi /boa-0.94.13/src/Makefile b) 三、修改源码 a) vi /boa-0.94.13/src/compat.h b) c) vi /boa-0.94.13/src/log.c d) e) vi /boa-0.94.13/src/boa.c f) g) vi /boa-0.94.13/src/boa.conf h) 四、编译 …

dpkg ihr状态_考勤机数据无法同步

考勤机数据无法同步最后更新于&#xff1a;2020-06-29 15:27:45请先参考以下操作指南确保考勤机正确安装&#xff1a;http://help.ihr360.com/time_machine.html如果安装后仍出现数据无法同步的问题&#xff0c;则建议按下面步骤排查&#xff1a;首先在时间管理-时间设置-考勤机…

windows 下安装 rabbitmq报init terminating in do_boot错误

好长时间没有写东西了&#xff0c;记一个安装笔记吧。 目前市面上比较常用的几个消息中间件&#xff0c;rabbitmq算是风评比较好的&#xff0c;所以就拿来安装一下玩玩喽&#xff08;很有可能也仅限于是安装一下。。。。&#xff09;安装过程不表&#xff0c;无非是下载Erlang和…

待遇 新时达机器人_践行中国制造2025:工业机器人企业突围之路

(一)工业机器人产业突围任重道远工业机器人是实施自动化生产线、工业4.0、智能制造车间、数字化工厂、智能工厂的重要基础装备之一&#xff0c;为贯彻落实好《中国制造2025》将机器人作为重点发展领域的总体部署&#xff0c;推进我国机器人产业快速健康可持续发展&#xff0c;《…

Mybatis中@Param的用法和作用

用注解来简化xml配置的时候&#xff0c;Param注解的作用是给参数命名&#xff0c;参数命名后就能根据名字得到参数值&#xff0c;正确的将参数传入sql语句中 我们先来看Mapper接口中的Select方法 package Mapper; Mapper public interface Mapper { Select("select s_id…

常用类回顾之(String类)

String类&#xff1a; String类:表示不可变的字符串,当前对象创建完毕之后,该对象的内容(字符序列)是不能改变的,一旦内容改变就是一个新的对象. String对象的创建: 1):直接赋一个字面量: String str1 “ABCD”; 2):通过构造器创建: String str2 new String(“ABCD”); 两种方…