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

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

MyBatis数据源DataSource分类

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

MyBatis把数据源DataSource分为三种:

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

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

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

DataSource的创建过程

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

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

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

mybatis 连接池_应用框架之Mybatis数据源和连接池相关推荐

  1. hikaridatasource连接池_细数springboot中的那些连接池

    hello~各位读者新年好! 回想起前几天在部署springboot项目到正线时,线上环境要求jdk7,可项目是基于jdk8开发的,springboot也是用的springboot2以上的版本,可以说 ...

  2. mybatis是什么_深入解析:Mybatis接口没有实现类为什么可以执行增删改查?

    作者:小傅哥 链接:https://segmentfault.com/a/1190000022767561 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言介绍 MyBatis 是一款非常优秀的 ...

  3. mysql外连接插座_深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接...

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和 ...

  4. mysql与java连接查询_【java】MySQL数据库之连接查询

    连接查询 首先来认识一个叫笛卡尔积 (cartesian product) 的东东,也可以叫直积. 假设我们有一个集合 A = {a, b}, 还有一个集合B = {0, 1, 2} ,那么这两个两集 ...

  5. volumio怎么连接屏幕_如何把拼接屏和电脑连接起来

    目前,拼接屏的应用范围不断扩大,液晶拼接屏终端是需要与电脑连接才能显示播放,那么拼接屏和电脑是怎么连接的呢? 现在有很多单位.企业展厅.会议室等都能见到液晶拼接屏的身影.包括我们在大街上经常会看到的大 ...

  6. mysql 左外连接原理_深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接...

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和 ...

  7. stringbuilder调用tostring常量池_彻底弄懂java中的常量池

    作者:tracy_666链接:https://www.jianshu.com/p/55f65dac1b4b JVM常量池主要分为Class文件常量池.运行时常量池,全局字符串常量池,以及基本类型包装类 ...

  8. python oracle连接池_【Python + Oracle】Python Oracle连接池—改进版

    Oracle 连接池第四版. 编程语言 Python 语言版本 3.5.3 实现功能 oracle 连接池,解决频繁连接oracle数据库带来的连接资源耗费问题 程序托管 GitHub-OracleP ...

  9. NETGEAR拒绝连接请求_详解 Tomcat 的连接数与线程池

    点击上方蓝色字体,选择"标星公众号" 优质文章,第一时间送达 关注公众号后台回复pay或mall获取实战项目资料视频 点击此链接:多套SpringCloud/SpringBoot实 ...

最新文章

  1. java md5算法,JAVA实现MD5算法
  2. Nature子刊:利用转细菌基因植物修复土壤有毒污染物!
  3. poj 2948 Martian Mining (dp)
  4. 清除浏览器某一特定网站的缓存(Microsoft Edge、Chrome等)
  5. 中国智慧VS西方智慧-看中国IT风云与IT产业怪状
  6. linux下mysql的忘记root密码的解决办法
  7. 会声会影x4素材_怎么给视频打马赛克?运用会声会影2019
  8. 汇编语言典型例子详解_汇编语言例子
  9. 合工大OJ 1359
  10. 在aspx页面显示一张完整的RDL报表
  11. 怎么用计算机算ess tss,计量经济学rss.tss.ess.是什么他们的..._注册计量师_帮考网...
  12. go语言导入自定义包出现: package xxx is not in GOROOT (/xxx/xxx) 的解决方案
  13. 数据结构与算法之美(一):概论
  14. 李宏毅——终身学习lifelong learning
  15. 我爱Flask框架之Flask简介与URL和视图介绍
  16. PHP之微信头像加水印
  17. 中科院计算所培训中心举办【人工智能的计算机工程】企业内部培训
  18. Flask中的session伪造
  19. 【用AI写周报,“卷死”同事】打造一款自动生成周报的微信小程序
  20. CodingGame - Shadows of the Knight - Episode 1思路

热门文章

  1. 当maven引用的jar在maven库中下载不到源代码
  2. filecoin白皮书_Filecoin收益知多少?
  3. Android监听WIFI信号,这可能是Android上monitore Wifi信号强度的最佳方法
  4. C语言结构和高二的知识,c语言基础知识复习.pdf
  5. excel不能编辑如何解锁_偷梁换柱之EXCEL编辑保护和VBA隐藏代码保护的解锁
  6. Minimum Inversion Number HDU - 1394(权值线段树/树状数组)
  7. ROS2学习(四).ROS 2 核心概念
  8. 安装mysql准备执行页面_mysql 安装
  9. php拉取公众号所有关注的人,微信公众平台开发获取关注者列表
  10. Altiumnbsp;designernbsp;学习教程