【Java架构必看】Mybatis用的什么连接池?

简介: Mybatis内置Pooled、Unpooled和JNDI三种数据源,支持连接池的Pooled性能有限,存在空闲资源占用、调优困难和连接泄漏等问题。因此推荐使用更成熟的第三方数据源如Hikari、Druid等,以提升系统稳定性和性能。

Mybatis内置了三种数据源,分别是Pooled、Unpooled和JNDI,其中Pooled数据源是具有连接池的。同时Mybatist也可以使用三方数据源,如Druid、Hikari、C3P0等等。

Mybatis数据源的类图如下所示:

image.gif


可以看到,在Mybatis中,会通过工厂模式来获得对应的数据源,那么Mybatis是在执行的哪一步获取的呢?

答案是在执行SQL之前,Mybatis会获取数据库连接Connection,而此时获得的Connection则是应用的启动的时候,已经通过配置项中的文件加载到内存中了:

<dataSource type="org.apache.ibatis.datasource.pooled.PooledDataSource">
  <property name="driver" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
  <property name="username" value="root"/>
  <property name="password" value="123456"/>
</dataSource>

一般情况下,我们不会使用Mybatis默认的PooledDataSource,而是会用Hikari,如果要增加Sql监控功能的话,也可以使用Druid,这是因为自带的数据库连接池有三个缺点:

  1. 空闲连接占用资源:连接池维护一定数量的空闲连接,这些连接会占用系统的资源,如果连接池设置过大,那么会浪费系统资源,如果设置过小,则会导致系统并发请求时连接不够用,影响系统性能。
  2. 连接池大小调优困难:连接池的大小设置需要根据系统的并发请求数、数据库的性能和系统的硬件配置等因素综合考虑,而这些因素都是难以预测和调整的。
  3. 连接泄漏:如果应用程序没有正确关闭连接,那么连接池中的连接就会泄漏,导致连接池中的连接数量不断增加,最终导致系统崩溃。

总的来说,专业的事情交给专业的组件来做,Mybatis功能的核心是ORM映射和缓存,数据库连接池这种东西,市场上已经有比它做的更好的,我们直接用那些更好的就行了。

目录
相关文章
|
23天前
|
消息中间件 架构师 Java
【Java架构师】各个微服务之间有哪些调用方式?
微服务拆分后需跨进程通信,常见方式包括HTTP调用(如RESTful、OpenFeign、@HttpExchange)、RPC框架(如Dubbo、gRPC、Thrift)、消息队列(如Kafka、RabbitMQ)及服务网格(如Istio)。不同场景下可依据性能、异步、跨语言等需求选择合适方案。
287 0
|
22天前
|
JSON 关系型数据库 MySQL
MySQL5.X和8.0有什么区别?
MySQL 8.0 相比 5.7 性能提升显著,支持 NoSQL、窗口函数、CTE、降序索引与隐藏索引,增强 JSON 处理,取消查询缓存以优化性能,默认使用 utf8mb4 编码,提升安全性、可靠性与高可用性,全面支持 ACID 事务和原子 DDL 操作。
95 5
|
Java C++ 开发者
深入理解 Java 异常体系:Checked vs Unchecked Exception
本文深入解析Java异常体系,厘清Error、Exception与RuntimeException的关系,探讨Checked与Unchecked异常的本质区别及设计争议,并结合Spring等框架实践,给出自定义异常、异常处理等最佳实践建议,助你掌握Java异常核心逻辑。
246 7
|
1月前
|
JavaScript 安全 前端开发
智能随访系统源码,如何使用Java Spring Boot,Vue,Ant Design快速开发一套医院随访系统
基于Spring Boot + Vue + Ant Design Vue技术栈开发的医疗随访系统,涵盖患者管理、随访计划与执行、统计报表及系统管理模块。前后端分离架构,支持多渠道随访,数据安全可控,具备良好的扩展性与开发效率。
116 0
|
23天前
|
架构师 IDE Java
【Java架构师】Maven中lombok那点事
SpringBoot项目中Lombok需在maven-compiler-plugin中配置`annotationProcessorPaths`,确保编译期生成getter/setter等方法;而`excludes`则在打包时排除Lombok依赖,减小体积,因运行时已无需该库。
107 0
|
安全 Java 数据安全/隐私保护
通过java实现ldap修改AD域用户密码(最新,详细)
环境及说明,AD证书安装过程,AD证书的导出与导入,AD证书导入java密钥库中,java实现ldap改密
22778 0
|
28天前
|
SQL 缓存 Java
【Java架构必看】Mybatis的工作原理
MyBatis执行分启动与运行两阶段:启动时加载配置,运行时代理执行SQL。通过JDK动态代理生成Mapper接口,结合缓存机制与Executor执行SQL,最终由TypeHandler完成结果映射。
79 4
|
1月前
|
Java
java初学者知识点
Java初学者需聚焦基础语法、面向对象、核心类库与编程思维。掌握数据类型、流程控制、类与对象、封装继承多态、String、集合、异常处理等核心内容,构建扎实入门框架,为进阶打下坚实基础。(238字)
170 2