天天看点

数据库驱动、Druid、MyBatis三者之间的关系

作者:编程侠Java

你是否曾经感到困惑,当谈到数据库驱动、Druid和MyBatis时,他们的关系是如何串联起来的?是的,这些都是非常基础的概念,但是理顺它们的关系很多人就开始犯迷糊了。一些开发人员按照现成的开源框架模仿着开发,知道在哪些目录下写什么格式的文件,但是却不理解他们之间到底是什么关系,怎么串联起来的。今天我们就来简单的梳理一下。

数据库驱动、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>           
数据库驱动、Druid、MyBatis三者之间的关系

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、MyBatis三者之间的关系

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           
数据库驱动、Druid、MyBatis三者之间的关系
数据库驱动、Druid、MyBatis三者之间的关系

MyBatis:MyBatis是一个流行的Java持久层框架,简化了与数据库的交互。它提供了将Java对象映射到SQL语句及其反向操作的方法,从而减少了数据库访问所需的样板代码。MyBatis允许开发人员在XML或注解中编写SQL查询,并处理将结果映射到Java对象的工作。它被视为一个对象关系映射(ORM)工具,并且可以与多种数据库系统一起使用。

数据库驱动、Druid、MyBatis三者之间的关系

undefined

从上面可以看出,mysql驱动是使Java应用程序能够与MySQL数据库进行通信的关键组件,durid是一个数据库连接池库,提供高性能的连接管理功能,而mybatis是一个持久层框架,简化了Java应用程序与数据库之间的交互,可以通过XML或注解编写SQL查询。这三者共同组成了一个强大的栈,使Java开发人员能够高效地与MySQL数据库进行交互,并减少样板代码的编写。

数据库驱动、Druid、MyBatis三者之间的关系:

借用别人说的一个例子:把 MyBatis 比作是警察,Druid 比作武器库(库里存放了很多枪)),数据库驱动比作武器制造商(他们制造抢给武器库);当平民百姓遇到危险需要寻求帮助时,第一时间寻找警察,警察从武器库拿枪干活。也就是先访问 MyBatis,MyBatis 与 Druid通信,Druid 与 数据库驱动 通信,数据库驱动 与底层数据库交互。

数据库驱动、Druid、MyBatis三者之间的关系