你是否曾经感到困惑,当谈到数据库驱动、Druid和MyBatis时,他们的关系是如何串联起来的?是的,这些都是非常基础的概念,但是理顺它们的关系很多人就开始犯迷糊了。一些开发人员按照现成的开源框架模仿着开发,知道在哪些目录下写什么格式的文件,但是却不理解他们之间到底是什么关系,怎么串联起来的。今天我们就来简单的梳理一下。
数据库驱动:数据库驱动是一个软件组件,针对不同的数据库有不同的数据库驱动,比如MySQL驱动、Oracle驱动等,数据库驱动使Java应用程序能够与数据库进行通信。它负责建立与数据库服务器的连接、发送SQL查询,并处理服务器返回的结果。该驱动在Java应用程序与数据库之间充当桥梁,使它们能够无缝交互。如果没有数据库驱动,Java应用程序将无法与MySQL/Oracle等数据库进行交互。
我们常使用的数据库有Oracle、MySQL、SQL Server、DB2、PostgreSQL、SQLite等,小编最常使用的是Oracle和MySQL,这里就以Oracle和MySQL为例。
MySQL常使用5.x 和8.x两个版本,使用的MySQL驱动有 mysql-connector-java-5.1.47.jar、mysql-connector-java-8.0.22.jar。
<!-- mysql 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
Oracle常使用12.2.x版本,ojdbc8-12.2.0.1.jar。
<!--oracle驱动-->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1</version>
</dependency>
Druid :Druid是阿里巴巴开源的JDBC(Java数据库连接)组件库。它提供高性能、可靠、高效的连接池解决方案,用于Java应用程序中的数据库连接管理。连接池帮助管理和重用数据库连接,减少为每个请求建立新连接的开销。除了连接池功能外,Druid还包括SQL解析、日志记录和监控等特性,因此在Java应用程序中管理数据库连接时,Druid是一个受欢迎的选择。
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8
username: root
password: root
# 数据源其它配置
druid:
#避免db单方面关闭连接,如mysql:show variables like '%timeout%',关注interactive_timeout和wait_timeout,默认8小时
#常见错误:The last packet successfully received from the server was 46170 milliseconds ago
#解决办法:1.miEvictableIdleTimeMillis < maxEvictableIdleTimeMillis
# 2.maxEvictableIdleTimeMillis + timeBetweenEvictionRunsMillis < 8h
initial-size: 5 #初始化连接池大小
min-idle: 3 #最小连接数
max-active: 20 #最大连接数
max-wait: 60000 #最长等待时间
#单位:ms,默认1min,两个作用
#1.Destroy线程运行周期,每隔多久运行一次,配合min-evictable-idle-time-millis和max-evictable-idle-time-millis使用;
#2.若testWhileIdle为true,申请连接时,若空闲时间大于time-between-eviction-runs-millis,则执行validation-query语句检测连接是否有效。
time-between-eviction-runs-millis: 6000 #关闭空闲连接间隔(ms)
# 单位:ms,连接保持空闲而不被驱逐的最小时间,默认30min
#连接被destroy线程关闭条件:大于minIdle且空闲时间大于1800000
min-evictable-idle-time-millis: 1800000
# 单位:ms,连接保持空闲而不被驱逐的最大时间,默认7h
#连接被destroy线程关闭条件:空闲时间只要大于25200000就关闭连接,不管池中连接数是否大于minIdle
max-evictable-idle-time-millis: 25200000
validation-query: SELECT 1 #数据库状态检测
test-while-idle: true #判断连接是否可用
test-on-borrow: false #在获得连接前是否要进行测试
test-on-return: false #在归还连接前是否要进行测试
pool-prepared-statements: false #不缓存pstmt,oracle可以配true
max-pool-prepared-statement-per-connection-size: 20 #配置pstmt缓存个数
filters: stat,wall,slf4j
#配置servlet,开启druid登录页和首页
stat-view-servlet:
enabled: true
login-username: admin
login-password: admin
#监控页面访问路径
url-pattern: /druid/*
#是否允许重置,一般不允许
reset-enable: false
#白名单
allow: 127.0.0.1
#黑名单
deny: 192.168.0.1
MyBatis:MyBatis是一个流行的Java持久层框架,简化了与数据库的交互。它提供了将Java对象映射到SQL语句及其反向操作的方法,从而减少了数据库访问所需的样板代码。MyBatis允许开发人员在XML或注解中编写SQL查询,并处理将结果映射到Java对象的工作。它被视为一个对象关系映射(ORM)工具,并且可以与多种数据库系统一起使用。
从上面可以看出,mysql驱动是使Java应用程序能够与MySQL数据库进行通信的关键组件,durid是一个数据库连接池库,提供高性能的连接管理功能,而mybatis是一个持久层框架,简化了Java应用程序与数据库之间的交互,可以通过XML或注解编写SQL查询。这三者共同组成了一个强大的栈,使Java开发人员能够高效地与MySQL数据库进行交互,并减少样板代码的编写。
数据库驱动、Druid、MyBatis三者之间的关系:
借用别人说的一个例子:把 MyBatis 比作是警察,Druid 比作武器库(库里存放了很多枪)),数据库驱动比作武器制造商(他们制造抢给武器库);当平民百姓遇到危险需要寻求帮助时,第一时间寻找警察,警察从武器库拿枪干活。也就是先访问 MyBatis,MyBatis 与 Druid通信,Druid 与 数据库驱动 通信,数据库驱动 与底层数据库交互。
本文暂时没有评论,来添加一个吧(●'◡'●)