【JDBC】JPA和JDBC的区别

1. 引言

在介绍JPA和JDBC之前,我们先了解一个概念:

持久化: 将程序数据在持久状态和瞬时状态间转换的机制。通俗的讲,就是瞬时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据(比如持久化至数据库中,能够长久保存)。

即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。

对象关系映射(Object Relational Mapping,简称ORM):是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。

简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。

ORM 把数据库映射成对象。

  • 数据库的表(table) --> 类(class)
  • 记录(record,行数据)–> 对象(object)
  • 字段(field)–> 对象的属性(attribute)

举例来说,下面是一行 SQL 语句。

SELECT id, first_name, last_name, phone, birth_date, sex
 FROM persons 
 WHERE id = 10

程序直接运行 SQL,操作数据库的写法如下。

res = db.execSql(sql);
name = res[0]["FIRST_NAME"];

改成 ORM 的写法如下。

p = Person.get(10);
name = p.first_name;

一比较就可以发现,ORM 使用对象,封装了数据库操作,因此可以不碰 SQL 语言。开发者只使用面向对象编程,与数据对象直接交互,不用关心底层数据库。

总结起来,ORM 有下面这些优点。

  • 数据模型都在一个地方定义,更容易更新和维护,也利于重用代码。
  • ORM 有现成的工具,很多功能都可以自动完成,比如数据消毒、预处理、事务等等
  • 它迫使你使用 MVC 架构,ORM 就是天然的Model,最终使代码更清晰。
  • 基于 ORM 的业务代码比较简单,代码量少,语义性好,容易理解。
  • 你不必编写性能不佳的 SQL。

2. JPA 概念

JPA(Java Persistence API,Java的持久化API)用于对象持久化的 API,是 Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层。Hibernate实现了该规范(xml/注解)

2.1 JPA 与 Hibernate的关系

(1)JPA 是 Hibernate 的一个抽象,就像 JDBC 和 JDBC 驱动的关系;

(2)JPA 是一种 ORM 规范,是 Hibernate 功能的一个子集 (既然 JPA 是规范,Hibernate 对 JPA 进行了扩展,那么说 JPA 是 Hibernate 的一个子集不为过);

(3)Hibernate 是 JPA 的一个实现;

2.2 JPA 包括三个方面的技术

1)ORM 映射元数据,支持 XML 和 JDK 注解两种元数据的形式

2)JPA 的 API

3)查询语言:JPQL

2.1 JPA 示意图:

在这里插入图片描述

3. JDBC

JDBC(Java Database Connectivity,简称JDBC) 是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。

JDBC提供了一种基准,可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

3.1 JDBC的目标

使Java开发者使用它可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。

3.2 JDBC 示意图

在这里插入图片描述

3.3 JDBC访问数据库的两种形式

在Java中,数据存储技术只能通过JDBC访问数据库,JDBC访问数据库的形式有两种:
(1)直接使用JDBC的API去访问数据库;
(2)间接地使用JDBC的API去访问数据库;如Hibernate,MyBatis等。(低层依然是JDBC)
JDBC是java访问数据库的基石,其他技术都是对JDBC的封装。

总结: JDBC本身是Java连接数据库的一个标准,是进行数据库连接的抽象层,由Java编写的一组类和接口组成,接口的实现由各个数据库厂商来完成。

JDBC的API在java.sql包中,各大厂商就会对JDBC的api提供实现类,也就是所谓的驱动包。

注意: 在开发中,使用到的关于JDBC的接口全部引入的是java.sql中的,千万不要引入com.mysql…xxx类(以MySQL为例)

4. JPA和JDBC对比

JDBC(Java Database Connectivity,简称JDBC) 也是一种规范和接口,不过 JDBC 是面向 SQL 的,使用起来比较繁琐。所以就有了 ORM 框架,建立了 Java 对象与数据库表之间的映射关系,可以通过直接操作对象来实现持久化,简化了操作的繁杂度。而 JPA 就是 ORM 框架的规范,值得一提的是 Hibernate 是符合 JPA 规范的,而 MyBatis 却不符合,因为 MyBatis 还是需要写 SQL 的。

参考链接

https://www.cnblogs.com/yunche/p/10279324.html
http://www.ruanyifeng.com/blog/2019/02/orm-tutorial.html
https://www.cnblogs.com/crawl/p/7703679.html

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值