一、连接池

1.概念:其实就是一个容器(集合),存放数据库连接的容器。

当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器

容器其实就是一个集合对象,该集合必须是线程安全的,不能两个线程拿到统一连接

该集合还必须实现队列的特性:先进先出

2.好处:

​ 1.节约资源

​ 2.用户访问高效

3.实现:

1.标准接口:DataSource javax.sql包下的

​ 1.方法:获取连接

​ 获取连接:getConnection()

​ 归还连接:Connection.close()如果连接对象Connection是从连接池中获得的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接

2.一般我们不去实现它,有数据库厂商来实现

​ 1.C3P0:数据库连接池技术

​ 2.Druid:数据库连接池实现技术,由阿里巴巴提供的

二、Mybatis连接池

Mybatis 中也有连接池技术,但是它采用的是自己的连接池技术。

有三种方式的配置:

配置的位置:

在Mybatis的主配置文件SqlMapConfig.xml 配置文件中的dataSource标签,type属性就是表示采用何种连接池方式。

type属性的取值:POOLED          传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现UNPOOLED      采用传统的获取连接的方式,虽然也实现了javax.sql.DataSource接口,但是并没有使用池的思想JNDI         采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到的dataSource是不同的。注意:如果不是web或者maven的war工厂,是不能使用的。经常使用的tomcat服务器,采用连接池就是dbcp连接池

三、POOLED与UNPOOLED结果对比

POOLED

从池中取一个连接使用

UNPOOLED

每次都会创建一个新的连接

创建了用完就关闭 渣男

四、POOLED与UNPOOLED代码比较

MyBatis内部分别定义了实现了java.sql.DataSource接口的 UnpooledDataSource,PooledDataSource类来表示UNPOOLED、POOLED类型的数据源。

CTRL+N进行查找

两个都继承了DataSource

UNPOOLED配置连接池分析

找到getConnection

跟doGetConnection进去,发现在创建properties对象,传用户名密码

再跟进去,就发现了熟悉的DriverManager,我们先进入initializeDriver看

  1. initializeDriver负责组成驱动
  2. 创建连接
  3. 返回连接

这就是UNPOOLED,每次都会注册驱动,获取连接,返回连接

POOLED配置连接池分析


跟popConnection进去

代码解释


如果为null,同步代码块,这一点为了线程安全

idleConnection空闲的connection如果是控(取反——空闲的连接还有的话

这里可以看一下idleConnection发现就是一个集合对象,印证了前面说的定义

先去看空闲有没有,有就去一个出来remove0


活动的连接池数量小于设定的最大值就可以创建一个连接

目前的意思是有空闲的就给你拿一个空闲的,没有的话就看一下连接池有没有位置,给你创建一个新的
都不满足的话就只有拿一个最老的(最先进来的)把他返回获取。

pooled总的来说就是:
  1. 先去看空闲池有没有
  2. 再去看活动池是否到达最大数量,没达到就创建一个连接
  3. 活动池也满了就找活动池中最先进来的拿来设置和清理

(觉得有帮助的话点个赞嘻嘻)

Mybatis连接池介绍与分类 Mybatis使用POOLED UNPOOLED配置连接池的原理分析相关推荐

  1. jdbc连接mysql数据库驱动下载_Java Jdbc驱动下载配置连接mysql数据库方法代码

    1.MySQL JDBC驱动下载 打开上面的下载地址,选择"Platform Independent",然后下载tar.gz或zip格式的都行,之后解压出来得到Jdbc驱动(mys ...

  2. python爬虫ip代理池_爬虫教程-Python3网络爬虫开发——IP代理池的维护

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 准备工作 要实现IP代理池我们首先需要成功安装好了 Redis 数据库并启动服务,另外还需要安装 Aiohttp.Requests.RedisPy.PyQ ...

  3. Mybatis中连接池介绍

    连接池:我们在实际开发中都会使用连接池.以为它可以减少我们获取连接所消耗的时间mybatis中的连接池mybatis连接池提供了三种方式的配置,配置位置主配置文件SqlMapConfig.xml中的d ...

  4. mybatis数据库连接池介绍和源码剖析

    mybatis数据库连接池分析介绍 一.数据库连接池 1.定义 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时 ...

  5. ssm注解配置连接mysql_基于注解和配置类的SSM(Spring+SpringMVC+Mybatis)项目详细配置...

    在上一篇文章中介绍了使用注解和xml配置文件对项目进行配置,在这篇文章中将xml配置文件中的配置信息都改成使用注解或者配置类的形式. 第一步.配置pom.xml 在一个ssm项目中,可能需要用到的依赖 ...

  6. Mybatis源码介绍

    Mybatis源码体系介绍和配置文件解析源码剖析 Mybatis和传统JDBC的优势 Mybatis MyBatis是一个持久层的ORM框架,使用简单,学习成本较低.可以执行自己手写的 SQL语句,比 ...

  7. Mybatis框架详细介绍

    一.Mybatis概述 1. 框架简介 目标 了解什么是框架 理解框架解决的问题 讲解 1.1 什么是框架 框架是整个或部分应用的可重用设计,是可定制化的应用骨架.它可以帮开发人员简化开发过程,提高开 ...

  8. spring中怎么访问MySQL过程_DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量...

    DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量 liuyuhang原创,未经允许禁止转载 系列目录连接 1.环境说明 mysql5.0以上版本. wi ...

  9. MyBatis超详细介绍——SQL语句构建器类

    MyBatis超详细介绍--SQL语句构建器类 (本文作为学习笔记,了解更多请参考:MyBatis参考文档) MyBatis3提供了SQL类帮助构造SQL语句: private String sele ...

最新文章

  1. 【多标签文本分类】Initializing neural networks for hierarchical multi-label text classification
  2. NeurIPS 2019放榜:华人作者贡献42%,谷歌170篇屠榜;国内清华第一,腾讯领衔产业界...
  3. 【有上下界网络流】【ZOJ】2314 Reactor Cooling
  4. Android中的相对布局
  5. 交华为换机access配置_华为交换机VLAN内Proxy ARP配置示例
  6. 波纹扩散_C4D_动画amp;RS波纹扩散效果J_014
  7. 当你在浏览器输入一个网址,如http://www.taobao.com,按回车之后发生了什么?
  8. es6=unicode码详解
  9. SPIR-V 研究:编译器基本原理
  10. 《运营之光》-- 学习笔记(四)
  11. 基于MUI框架的使用HTML5+实现的二维码扫描功能
  12. 大数据挑战与NoSQL数据库技术pdf
  13. python read_csv dtype_Pandas read_csv low_memory和dtype选项
  14. 详解样条曲线(上)(包含贝塞尔曲线)
  15. c++ atuo_ptr 的实现原理
  16. Redis队列和专业MQ的对比和选型
  17. for循环实现质数python_少儿编程Python第4课-for循环语句(质数判断)
  18. 读书笔记-可靠性工程师前言
  19. ERROR 1010 (HY000): Error dropping database (can't rmdir './library', errno:
  20. 创建一个微信小程序——如何注册账号,安装微信开发者工具,创建一个小程序(详细步骤版)

热门文章

  1. java中static讲解
  2. selinux 简介
  3. 一篇看懂C#中的Task任务_初级篇
  4. 几种梯度下降方法对比(Batch gradient descent、Mini-batch gradient descent 和 stochastic gradient descent)
  5. android service单独进程,Android 通过Service单独进程模仿离线推送 Server Push
  6. Unix时间戳(Unix timestamp)及其他时间标准
  7. Postman使用各种格式的时间戳转换(UTC,Timestamp,UnixTimeStamp)
  8. 栈,实现递归的数据结构
  9. MLP Attention实现
  10. pre标签内容不自动换行解决方案