《浅谈Java、JDBC、JDBC驱动、ORM框架和JPA之间的关系》

《浅谈Java、JDBC、JDBC驱动、ORM框架和JPA之间的关系》,第1张

(一)为什么会有JDBC(Java DataBase Connectivity: Java数据库连接)


        数据库管理系统(RDBMS: Relational DataBase Manager System 关系型数据库管理系统)有多种,如MySQL、Oracle、SQLServer、DB2等,Java应用程序想要连接各种数据库,最原始的方式就是由各个数据库管理厂商提供对应数据库的API(Application Programming Interface),Java应用程序去调用不同数据库的API去访问对应的数据库,实现对数据的CRUD(Create、Retrieve、Update、Delete),但是这种方式的不便之处在于每个数据库厂商提供的API接口都不一样,Java应用程序要切换不同的数据库时,就要针对要使用的数据库重新编写 *** 作数据库的代码,这就导致了代码耦合性高,维护难度大,不易扩展等各种问题;

        为了解决上述问题,Sun公司制定了一组规范(接口),即JDBC接口,当Java应用程序需要访问各个不同的数据库时,只需要调用JDBC接口就可以了,而不用针对具体的数据库管理系统编写不同的代码去 *** 作数据库;但是JDBC本身只是一组接口,并没有提供对应的实现类,那么作为程序员的你可能就会有疑问了,你只是提供了访问不同数据库的一组标准接口,没有接口的实现类怎么办呢?其实JDBC接口的具体实现类是由各个数据库厂商来提供的,这些不同的数据库厂商提供的JDBC接口的实现类就被称之为数据库驱动,或者叫JDBC驱动。

        所以说,JDBC本身是一组规范(接口),它统一了Java应用程序访问数据库的标准。

(二)为什么会有ORM(Object Relational Mapping: 对象关系映射)框架


        有了统一 *** 作数据库的JDBC规范之后,Java应用开发人员就可以针对JDBC的各种接口进行编程去 *** 作各种数据库而不用关心底层的实现细节(具体如何对数据库表中的数据进行增删改查是由各个数据库驱动完成的);在早期,开发人员使用JDBC编程的确在一定程度上简化了代码的编写,提高了开发效率,但是随着项目需要快速交付以及技术的不断更新迭代,不再适合使用JDBC去 *** 作数据库,并且JDBC本身也存在着一些缺点:

  1. 数据库连接的创建和释放频繁,造成系统资源的浪费,从而影响系统性能;(如果使用数据库连接池可解决此问题)
  2. SQL语句在代码中硬编码,造成代码不易维护;在实际的业务逻辑中,sql语句变化的可能性很大,此时就需要修改源码,导致系统不易维护;
  3. 对结果集的解析存在硬编码,sql变化导致解析代码发生变化,也会导致系统不易维护。如果能将结果集(数据库记录)封装成pojo对象解析比较方便。

        所以,为了解决上述JDBC存在的一些列问题,出现了一些ORM框架,ORM框架的实质是对JDBC进行了一层封装,应用编程人员想要 *** 作数据库时,面向的不再是JDBC接口,而是ORM框架(ORM框架对数据库表做CRUD *** 作,实际上ORM框架底层还是调用了JDBC接口,再由JDBC接口的具体实现类,也就是具体的数据库驱动类完成对数据库表中记录的CRUD *** 作)ORM框架可以简化之前直接使用JDBC *** 作数据库的繁琐步骤;目前常见的ORM框架有commons-dbutil、hibernate、mybatis、Spring:JdbcTemplate。

(三) 为什么会有JPA(Java Persistence API: Java持久化API)


        当ORM框架多了以后,尽管ORM框架简化了我们 *** 作数据库的难度,但是众多的ORM框架有着各自不同的API和实现逻辑(尽管底层都是一样的),当我们的项目想从一种ORM框架切换到另一种ORM框架时,可能整个持久层的代码都要重构,项目维护难度大。这个时候我们不禁会想到一件事:最原始的是Java程序直接 *** 作各种不同的数据库很麻烦,于是出现了JDBC统一了Java应用程序访问数据库的标准;之后我们又觉得面向JDBC *** 作数据库也麻烦,于是就出现了ORM框架,简化了JDBC *** 作数据库的一些缺点;那么现在由于众多的ORM框架的出现之后,我们面对的是一个个具体的ORM框架,想要切换不同的ORM框架很麻烦,那为什不把这些ORM框架也统一起来形成一个标准呢?于是在JavaEE5.0出现了标准的ORM规范,使得应用程序可以 以统一的方式访问持久层。这个规范就是JPA。

        JPA本质上就是一种ORM规范,不是ORM框架。因为JPA并未提供ORM实现,它只是制定了一些规范,提供了一些编程的API接口,但是具体实现是由ORM厂商来提供。比如Hibernate就是JAP规范的一种实现,即Hibernate除了作为ORM框架之外,它也是一种JPA实现。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/921453.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存