首页 > 其他分享 >mybatis的连接池

mybatis的连接池

时间:2022-12-14 17:00:41浏览次数:49  
标签:PooledConnection state mybatis new 连接 连接池

mybatis的连接池

连接池:我们在实际开发中都会使用连接池 因为它可以减少我们获取连接所消耗的时间
连接池就是用于存储连接的一个容器 容器其实就是一个集合对象 该集合必须是线程安全的 不能两个线程拿到同一连接 该集合还必须实现队列的特性 先进先出
mybatis连接池的分类
001-POOLED
<dataSource type="POOLED">
如果将属性设置成POOLED,mybaties会创建一个数据库连接池,连接池的一个连接将会被用作数据库操作。一旦数据库操作完成,mybaties会将此连接返回给连接池。在开发或测试环境中经常用到此方式。

核心代码
//空闲连接
protected final List<PooledConnection> idleConnections = new ArrayList();
//活跃连接
protected final List<PooledConnection> activeConnections = new ArrayList();
synchronized(this.state) {
//如果空闲的连接还有
if (!this.state.idleConnections.isEmpty()) {
//remove说明就拿出来一个直接去用
conn = (PooledConnection)this.state.idleConnections.remove(0);
//如果空闲连接没有 且活动着的连接的数量 小于设定的最大数量
//那就重新new一个连接
} else if (this.state.activeConnections.size() < this.poolMaximumActiveConnections) {
conn = new PooledConnection(this.dataSource.getConnection(), this);
} else {
//假如都没有了 获取活动中最老的一个连接 然后拿出来用做一些操作重新用
PooledConnection oldestActiveConnection = (PooledConnection)this.activeConnections.get(0);
long longestCheckoutTime = oldestActiveConnection.getCheckoutTime();

002-UNPOOLED
<dataSource type="UNPOOLED">
如果将类型设置成UNPOOLED,mybaties会为每一个数据库操作创建一个新的连接,并关闭它。但是并没有使用池的思想 每次用都重新获取一个新的连接

源码
private Connection doGetConnection(Properties properties) throws SQLException {
this.initializeDriver();
Connection connection = DriverManager.getConnection(this.url, properties);
this.configureConnection(connection);
return connection;
}
就是和之前jdbc一样 注册驱动 创建连接 等

003-JNDI
<dataSource type="JNDI">
如果将类型设置成JNDI。mybaties会从在应用服务器向配置好的JNDI数据源DataSource获取数据库连接。在生产环境中优先考虑这种方式。

 

标签:PooledConnection,state,mybatis,new,连接,连接池
From: https://www.cnblogs.com/popopopopo/p/16982649.html

相关文章

  • Mybatisplus自动生成SQL语句变成下划线
    ###Errorqueryingdatabase.Cause:java.sql.SQLSyntaxErrorException:Unknowncolumn'l_o_g_i_n_n_a_m_e'in'fieldlist'###Theerrormayexistincom/rqzx/api......
  • 基于Springboot+Mybatis+mysql+vue宠物领养网站1
    @目录一、系统介绍二、功能展示1.主页(普通用户)2.登陆、注册(普通用户)3.宠物大全(普通用户)4.宠物详情(申请领养、点赞、评论)(普通用户)5.我的申请(普通用户)6.个人信息(普通用户......
  • jdbc中druid连接池遇到的问题和jdbcTemplate
    无效的源发行版11这是jdk版本不一致,去项目结构里排查一下严重:initdatasourceerrorcom.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:Coulj......
  • Mybatis学习之实现数据的增删改查(3)
    前面已经讲到用接口的方式编程。这种方式,要注意的一个地方就是。在User.xml 的配置文件中,mappernamespace="com.yihaomen.mybatis.inter.IUserOperation",命名空间非常重......
  • Mybatis学习之实现关联数据的查询(4)
    有了前面几章的基础,对一些简单的应用是可以处理的,但在实际项目中,经常是关联表的查询,比如最常见到的多对一,一对多等。这些查询是如何处理的呢,这一讲就讲这个问题。我们首先创......
  • Mybatis学习之实现mybatis分页(8)
    上一篇文章里已经讲到了mybatis与springMVC的集成,并且做了一个列表展示,显示出所有article列表,但没有用到分页,在实际的项目中,分页是肯定需要的。而且是物理分页,不是内存分......
  • 自定义mybatis框架
    自定义mybatis框架自定义mybatis框架整体思路如下:首先我们需要获取一个输入流然后解析我们的xml主配置文件这里面主要涉及到数据库的连接信息和我们的mapper配置文件信......
  • mybatis的mapper映射文件
    mybatis的mapper映射文件MyBatis的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的XML文件就显得相对简单。如果拿它跟具有相同功能的JDBC代码......
  • myBatis的全局配置文件
    myBatis的全局配置文件mybatis封装需要的三要素数据源执行语句操作者SqlSessionFactoryBuilder第一步解析xml文件configuration(配置)001运行环境environmentdataSource......
  • mybatis入门案例
    创建模块,导入坐标:<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></prop......