数据源和数据连接池
本文最后更新于:5 个月前
⚡数据源:
简单理解为数据源头,提供了应用程序所需要数据的位置。它是连接到实际数据库的一条路径而已,数据源中并无真正的数据,它仅仅记录的是你连接到哪个数据库,以及如何连接的
数据源保证了应用程序与目标数据之间交互的规范和协议,目标数据的存储可以是数据库,文件系统等等。
数据源定义了位置信息,用户验证信息和交互时所需的一些特性的配置,同时它封装了如何建立与数据源的连接,向外暴露获取连接的接口。
应用程序连接数据库无需关注其底层是如何如何建立的,也就是说应用业务逻辑与连接数据库操作是松耦合的。
数据源大致分为2种:不提供数据连接池和提供数据连接池管理。
⚡数据连接池
-
JDBC操作的步骤:
-
加载驱动程序
-
连接数据库
-
操作数据库
-
关闭数据库,释放连接
但是当与数据库交互频繁时,这种模式会严重影响程序的性能。时间和空间消耗大多数消耗在连接和销毁中,而非数据库处理。
Spring 默认的
Spring-jdbc
的 DriverManagerDataSource 就是不提供连接池的,该数据源对于应用程序的每一个连接请求都建立新的连接,当应用程序使用完毕后,再执行销毁操作。 -
-
使用数据库连接池
数据库连接是负责分配、管理和释放数据库连接。数据库连接池里专门保存着全部的数据库连接,以后用户用数据库操作的时候不用再重新加载驱动、连接数据库之类的,而直接从此空间中取走连接,关闭的时候直接把连接放回到此空间之中。
Spring Boot 是采用 HikariCP 来作为默认的数据源。
⚡Spring 中的常用数据访问技术
-
JDBC
Java数据库连接,(Java Database Connectivity,简称 JDBC )是 Java 语言中用来规范客户端程序如何来访问数据库的应用程序接口,用于在 Java 语言编程中与数据库连接的 API
也就是说,JDBC是一个规范,它提供了一整套接口( 是 API 而不是 interface ,但是只是低级 API 或者叫底层 API,因为它直接调用 SQL 命令 ,其他有各自封装好 JDBC 的高级 API, 例如 JDBI),允许以一种可移植的访问底层数据库 API。使用 JDBC 驱动程序来访问数据库,并用于存储数据到数据库中.
-
Spring Data JPA
Spring Data JPA 基于 Hibernate,而 Hibernate 是一个让人又爱又恨的技术。
同原生 JDBC 相比,Hibernate 极大地简化了开发工作量;但另一方面,因为 Dirty Check、延迟加载、各种如 ManyToOne 等映射规则,又让 Hibernate 成为了一个复杂技术。而这些复杂性,平时很少直接用到,但是却增加了 Hibernate 的开发和调试难度。
-
Spring Data JDBC
Spring Data JDBC 的目的是为了给基于 JDBC 的数据库应用提供 Repository 封装。
简单说,就是为了让大家用到类似于 Spring Data JPA 中 JpaRepository 的功能,但是不引入任何ORM框架。
也就是我们经常在代码里看到 JDBCTemplate 这个辅助类进行开发
-
MyBatis
和 Hibernate 一样是第三方 ORM 数据库框架。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。
注意:
Hibernate是全自动ORM框架,而Mybatis是半自动的。hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql。而mybatis仅有基本的字段映射,对象数据以及对象实际关系仍然需要通过手写sql来实现和管理。
本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 。转载请注明出处!