mybatis 连接池_应用框架之Mybatis数据源和连接池

本文将从以下几个方面介绍Mybatis的数据源和连接池:

  • MyBatis数据源DataSource分类
  • 数据源DataSource的创建过程
  • DataSource什么时候创建Connection对象

MyBatis数据源DataSource分类

MyBatis数据源实现是在以下四个包中:

539c75e8f29f494e26b53a4b25858cb4.png

MyBatis把数据源DataSource分为三种:

1、UNPOOLED:不使用连接池的数据源

2、POOLED: 使用连接池的数据源

3、JNDI:使用JNDI实现的数据源(JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一。JNDI由j2ee容器提供,避免了程序与数据库之间的紧耦合,使应用更加易于配置、易于部署)

f0bb0d462319d73e28b77ca792cb27fd.png

DataSource的创建过程

通过上一篇文章 应用框架之Mybatis初始化机制解析 可以知道,在Mybatis初始化过程中,会将DataSource实例放到Configuration对象内的Environment对象中。在解析xml配置时:

通过DataSourceFactory.getDataSource()方法来创建数据源DataSource。

7a762055ce428b7ca8a7b8652793a491.png

DataSource什么时候创建Connection对象

当我们需要创建SqlSession对象并需要执行SQL语句时,这时候MyBatis才会去调用dataSource对象来创建java.sql.Connection对象。也就是说,java.sql.Connection对象的创建一直延迟到执行SQL语句的时候。例如:

String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();sqlSession.selectList("SELECT * FROM STUDENTS");

前4句都不会导致java.sql.Connection对象的创建,只有当第5句sqlSession.selectList("SELECT * FROM STUDENTS"),才会触发MyBatis在底层执行下面这个方法来创建java.sql.Connection对象:

//Transaction的实现类中创建,最终调用到DataSource的实现类protected void openConnection() throws SQLException { if (log.isDebugEnabled()) { log.debug("Opening JDBC Connection"); } connection = dataSource.getConnection(); if (level != null) { connection.setTransactionIsolation(level.getLevel()); } setDesiredAutoCommit(autoCommmit); }

UnpooledDataSource.getConnection()

使用UnpooledDataSource的getConnection(),每调用一次就会产生一个新的Connection实例对象。

public Connection getConnection() throws SQLException{ return doGetConnection(username, password);} private Connection doGetConnection(String username, String password) throws SQLException{ //封装username和password成properties Properties props = new Properties(); if (driverProperties != null) { props.putAll(driverProperties); } if (username != null) { props.setProperty("user

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

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

相关文章

python默认安装地址_python多版本下设置python3为默认的方法

python3设置为多版本为默认的方法 如何在双python下设置python3为默认 在C:\Program下举例 第一步安装好python2和python3后设置好环境变量 第二步去掉python2根目录下的python.exe文件,还有Scripts文件夹下的pip.exe文件 第二步复制python3根目录下的python3.exe文…

惠普图形计算机游戏,惠普发布Victus by HP 16 - 一款适合PC游戏新人的游戏笔记本...

除了更新了其Omen系列的笔记本电脑,惠普今天还宣布了一个新的游戏笔记本电脑品牌,名为Victus by HP 16。看起来,Victus是为那些刚进入PC游戏世界的人准备的,他们可能不一定想买一台顶级的游戏笔记本作为他们的第一次尝试。虽然这表…

php 获取某一年最后一天_vivo年货节最后一天!多款机型大促,错过让你后悔再等一年!...

即将进入春节回乡高峰期,然而在这个时候许多小伙伴都会先购入春节必备用品。除了一些日用品外,手机也许是新年最佳的换机时间。最近,国产手机品牌vivo就开启了年货节活动,不过今天是最后一天了。vivo旗下众多商品都拥有不小的优惠…

计算机操作记录怎么删除,win7系统如何清除电脑使用记录

‍‍电脑被使用过后或大或少都会留下使用痕迹,就比如浏览器的历史记录,通过这个就可以看出电脑的主人喜欢访问的网站。有位win7 64位旗舰版用户向小编反馈,电脑要暂时借给朋友一段时间,要怎么消除自己的使用记录呢?下面…

分区供水条件口诀_口诀记忆 | 消防给水和消火栓系统的“月检”(重点学习)...

今日分享在消防给水和消火栓系统当中,维护管理及保养的周期,是综合能力与案例分析考试的重点所在,每年考查的分数在12分左右(两科之和),因此关于周期性维护管理的知识点,需要我们掌握并牢记。今天,我们把最…

php websocket 是否在线_看完让你彻底理解WebSocket原理,附实战代码(包含前端和后端)...

作者:nnngu来源:https://www.cnblogs.com/nnngu/p/9347635.html1、前言最近有同学问我有没有做过在线咨询功能。同时,公司也刚好让我接手一个 IM 项目。所以今天抽时间记录一下最近学习的内容。本文主要剖析了 WebSocket 的原理,以…

asp.net mvc项目实例_降龙-第13章:MVC开发准备

从这一章开始我将逐步研发一个MVC框架并内嵌在​我的开源项目中。由于内容会很多,所以我尽量拆分成多个章节来介绍,以展示框架研发的过程和一些​细节。上面上传的代码是整套MVC框架设计的起点,这些都是我们在spring中常见的注解类&#xff0…

waf可以检测哪个端口的流量_锐速云:CC防御过程中,WAF的主要特点有哪些?

一部分网站和游戏,以及金融的企业网站负责人员对于流量攻击应该属于耳熟能详。对此问题一直也是他们最头疼的。因此在解决DDoS攻击和CC攻击防御的过程中,运用了WAF指纹识别架构去做相对应的权限策略,以此避免误封正常的用户访问请求。这里的W…

frame中src怎么设置成一个变量_自动格式化打印变量HMLog介绍

作者 | mao2020来源 | 掘金,点击阅读原文查看作者更多文章前言在我初学iOS的时候,经常需要NSLog打印用于调试,有时候还需要打印多个变量:NSLog("xxxx frame% tag%ld isHidden%d", NSStringFromCGRect(view.frame), view…

电大计算机组成原理ppt,四川电大计算机组成原理(0023)第二次形考作业(课程号:5110023).docx...

四川电大计算机组成原理(0023)第二次形考作业(课程号:5110023).docx 计算机组成原理(0023)第二次形考作业四川电大形成性测评系统 课程代码5110023 参考资料 、单项选择题(共 7 道试题,共 35 分。)1. 组成一个运算器需要多个部件,但下面所列_…

android系统里面的mic是哪个app_安利 | 那些错过会后悔一年的法语APP

如今手机使用的频率越来越高,感觉每一个人都是“低头族”。既然我们都离不开手机,那我们何不利用手机来学习法语呢?今天我就跟大家推荐一些超级好用的各类法语APP,每个APP会注明IOS系统和android系统是否兼容。提高dicte和单词拼写…

北斗通信运营商_国内首个“北斗+5G”应用方案发布 配套5G产品将于年底量产上市...

北京合众思壮科技股份有限公司研发的各类北斗导航应用终端 郭超凯 摄北京合众思壮科技股份有限公司研发的各类北斗导航应用终端 郭超凯 摄中新网郑州9月10日电 (郭超凯)中国卫星导航与位置服务第八届年会10日在郑州召开,北京合众思壮科技股份有限公司(以下简称合众思…

Redis-运维

转自 极客时间 Redis 亚风 原文视频:https://u.geekbang.org/lesson/535?article681062 Redis 同步 Redis主从数据同步,主从第⼀次同步是全量同步 replicaof 主机 端口 #当前这个机器做Master的备份master如何判断slave是不是第⼀次来同步数据: Repl…

python括号的区别_Python中类-带括号与不带括号的区别

类不带括号我们叫赋值,带括号我们叫实例化。 什么是赋值? a7 ba id(7) 140726814208448 id(a) 140726814208448 id(b) 140726814208448 从上面例子中我们可以看出变量a赋值7、b赋值a,它们的内存地址都是相同的。 它们是指向了同一个内存地址&…

初中教师资格证计算机试讲教案模板,教案模板:教师资格证面试初中英语万能教案模板...

【摘要】授课是一门艺术,好的授课方式可以使学生举一反三,培养学生自主学习能力。此时,课前的教案准备工作就极为重要。那么如何写出一篇好的教案呢?考必过为大家精心整理了教案模板:教师资格证面试初中英语万能教案模…

idea yml文件不变成树叶_springboot获取配置文件的三种方式

hello,大家好,有今天没有写文章了,因为呢,最近,公司有点事情,需要我呢,搭建一个demo,框架呢是springbootActive实现消息的延时发送和定时发送功能,为了项目以后中使用到&…

python3.7代码_Centos7源代码安装python3.7,centos7,源码,python37

1、centos7默认安装python2.7,不需要卸载; 2、安装gcc; 3、安装依赖包: yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-deve…

小米相机摄像头测试软件,摄像头拍照效果测试

◆ 摄像头拍照效果评测摄像头已成为时下任何一款手机都应该有的基本设备了,经过几年的发展,目前主流智能手机所配备的摄像头俨然到达了动辄500W像素以上的级别,而旗舰产品基本都会配备一颗不失体面的800W像素以上的摄像头。小米手机也搭配了一…

电脑关闭计算机怎么重启计算机,教您电脑关机后总是重启怎么办

电脑关机后自动重启的问题,一直困扰一些朋友,通常就是关闭系统后,电脑又自己开机启动了,我们不得不拔掉电源或强制关机,要解决电脑无法关机变重启的问题就要找到原因然后解决,下面,小编讲处理电…

计算机技能节活动作文,技能节感想作文

技能节感想作文在日常学习、工作和生活中,大家都跟作文打过交道吧,作文可分为小学作文、中学作文、大学作文(论文)。那么你知道一篇好的作文该怎么写吗?下面是小编为大家收集的技能节感想作文,欢迎大家借鉴与参考,希望…