数据源和数据连接池

本文最后更新于:5 个月前

数据源:

简单理解为数据源头,提供了应用程序所需要数据的位置。它是连接到实际数据库的一条路径而已,数据源中并无真正的数据,它仅仅记录的是你连接到哪个数据库,以及如何连接的

数据源保证了应用程序与目标数据之间交互的规范和协议,目标数据的存储可以是数据库,文件系统等等。

数据源定义了位置信息,用户验证信息和交互时所需的一些特性的配置,同时它封装了如何建立与数据源的连接,向外暴露获取连接的接口。

应用程序连接数据库无需关注其底层是如何如何建立的,也就是说应用业务逻辑与连接数据库操作是松耦合的。

数据源大致分为2种:不提供数据连接池和提供数据连接池管理。

数据连接池

  • JDBC操作的步骤:

    1. 加载驱动程序

    2. 连接数据库

    3. 操作数据库

    4. 关闭数据库,释放连接

    但是当与数据库交互频繁时,这种模式会严重影响程序的性能。时间和空间消耗大多数消耗在连接和销毁中,而非数据库处理。

    Spring 默认的 Spring-jdbc 的 DriverManagerDataSource 就是不提供连接池的,该数据源对于应用程序的每一个连接请求都建立新的连接,当应用程序使用完毕后,再执行销毁操作。

  • 使用数据库连接池

    数据库连接是负责分配、管理和释放数据库连接。数据库连接池里专门保存着全部的数据库连接,以后用户用数据库操作的时候不用再重新加载驱动、连接数据库之类的,而直接从此空间中取走连接,关闭的时候直接把连接放回到此空间之中。

    Spring Boot 是采用 HikariCP 来作为默认的数据源。

Spring 中的常用数据访问技术

  1. JDBC

    Java数据库连接,(Java Database Connectivity,简称 JDBC )是 Java 语言中用来规范客户端程序如何来访问数据库的应用程序接口,用于在 Java 语言编程中与数据库连接的 API

    也就是说,JDBC是一个规范,它提供了一整套接口( 是 API 而不是 interface ,但是只是低级 API 或者叫底层 API,因为它直接调用 SQL 命令 ,其他有各自封装好 JDBC 的高级 API, 例如 JDBI),允许以一种可移植的访问底层数据库 API。使用 JDBC 驱动程序来访问数据库,并用于存储数据到数据库中.

  2. Spring Data JPA

    Spring Data JPA 基于 Hibernate,而 Hibernate 是一个让人又爱又恨的技术。

    同原生 JDBC 相比,Hibernate 极大地简化了开发工作量;但另一方面,因为 Dirty Check、延迟加载、各种如 ManyToOne 等映射规则,又让 Hibernate 成为了一个复杂技术。而这些复杂性,平时很少直接用到,但是却增加了 Hibernate 的开发和调试难度。

  3. Spring Data JDBC

    Spring Data JDBC 的目的是为了给基于 JDBC 的数据库应用提供 Repository 封装。

    简单说,就是为了让大家用到类似于 Spring Data JPA 中 JpaRepository 的功能,但是不引入任何ORM框架。

    也就是我们经常在代码里看到 JDBCTemplate 这个辅助类进行开发

  4. MyBatis

    和 Hibernate 一样是第三方 ORM 数据库框架。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。

    注意:

    Hibernate是全自动ORM框架,而Mybatis是半自动的。hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql。而mybatis仅有基本的字段映射,对象数据以及对象实际关系仍然需要通过手写sql来实现和管理。