对于任何规模的企业应用来说,数据持久化都是其中必不可少的一个关键组成部分。因为持久化是如此重要,而关系数据库是事实上的数据存储标准,所以Java的所有者Sun Microsystems早早就为数据库访问制订了规范,这就是JDBC(Java Database Connectivity)。
JDBC的本意是为不同种类的关系数据库制定统一的API,这样一来,Java开发者就不再需要针对不同类型的关系数据库分别编写一套不同的访问代码。但是在JDBC的使用上,还是存在下面的严重问题无法解决:
- 使用JDBC规范编写的数据访问代码非常冗长,每个连接、语句、结果集都要记得手工关闭,而连接、语句、结果集的创建、操作和关闭都会抛出受检的(checked)异常,稍不小心就会导致内存泄露或者连接耗尽。据统计,绝大部分的开发者都不能编写正确的、完善的JDBC数据库访问代码,包括很多大牛都会犯错误。你能想象语句的关闭也会抛出异常,需要再次捕获并且在
finally语句里面处理吗? - JDBC虽然在API层面作出了统一,但是在SQL语句的层面上却不能统一。针对Oracle编写的JDBC访问代码不能直接移植到MySQL上,因为它们各自支持不同的方言。因此,JDBC不能保证数据库可移植性。
- Java是一种面向对象的编程语言。在企业应用中,需要持久化到数据库的是领域层的领域对象(实体和值对象)。领域对象之间有四种关系:关联、泛化(继承)、聚合和组合。而数据库核心对象是二维数据表,表与表之间只有一种关联关系。在对象模型和关系模型之间存在阻抗失配。要将实体对象持久化到关系数据库中,需要编写大量的转换代码。
对Java持久化进行标准化的第二次尝试是EJB规范中的实体Bean。实体Bean是可以存储在持久存储介质上的持久对象,常用来表示持久性数据并提供操作这些数据的方法。但是实体Bean非常难用,又只能在JavaEE的环境下使用,这意味着必须使用笨重的应用服务器例如WebLogic和WebSphere,而且不能在EJB容器外进行轻量级的单元测试。。
由于官方规范的落后,Java社区中的

本文探讨了Java数据持久化的演变,从JDBC的问题到JPA的标准化,以及Hibernate和Spring Data JPA如何简化ORM过程。主要内容包括使用JPA进行ORM编码,依赖Hibernate作为运行时支持,以及利用Spring Data JPA进行查询操作。
最低0.47元/天 解锁文章
1161

被折叠的 条评论
为什么被折叠?



