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)”,它是所有类型的内连接的基础。 如果把表视为…

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…

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) 四、编译 …

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

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

常用类回顾之(String类)

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

ad如何设置pcb板子形状_俺老孙画个圈板框与安装孔PCB系列教程110

点击上方蓝字关注我们画个板子&#xff0c;要先划圈&#xff0c;把所有笨蛋元器件圈起来。这个圈&#xff0c;就是板子的边框&#xff0c;简称板框。自定义板框形状比较复杂的电路板&#xff0c;一般由专业的CAD结构工程师设计&#xff0c;并提供DWG或者DXF格式的文件给电子工程…

Mybatis查询传递单个参数和传递多个参数用法

一&#xff1a;单个参数&#xff0c;Mybatis不会做特殊处理 二&#xff1a;多个参数&#xff0c;Mybatis会做特殊处理 1:传递多个多个参数时候&#xff0c;第一种写法如下 比如传递了两个参数&#xff0c;用 #{param1} and #{param2}取值 2:传递多个多个参数时候&#xff0c…

No.7 nginx、nfs、集群

安装并启动nginx服务 1、二进制安装nginx包 ~ yum -y install epel-release && yum -y install nginx #配置环境 关闭防火墙 ~ iptables -F // 或 systemctl stop filewallf 2、作为web服务修改配置文件 ~ vim /etc/nginx/nginx.conf //暂时不修改配置 3…

jsapi支付签名_微信支付小程序支付全流程

点击蓝色字关注我们&#xff01;一个努力中的公众号长的好看的人都关注了本文给大家讲解微信小程序支付全流程&#xff0c;以及相关功能源代码&#xff0c;项目不开放&#xff0c;带来不便尽请谅解。小程序支付主要包含如下几步骤&#xff0c;1.预下单-调用微信统一下单接口进行…

攻击防护手段_如何防护ddos流量攻击?

量攻击分很多种&#xff1a;我们常见的DDOS CC SYN UDP等&#xff0c;目前在网络中&#xff0c;流量攻击比较难解决&#xff0c;普通的IDC机房或是服务器商都是依靠硬防来解决&#xff0c;但是碰到大流量攻击&#xff0c;往往是拔线了事&#xff0c;所以都不是什么好办法&#…

MyBatis参数名称解析器-ParamNameResolver解析

ParamNameResolver ParamNameResolver是一个参数名解析器&#xff0c;负责把方法的参数按顺序解析出来并进行标注 主要用来处理接口形式的参数&#xff0c;最后会把参数处放在一个map中 map的key为参数的位置&#xff0c;value为参数的名字 package org.apache.ibatis.refle…