jdbc、jpa、spring data jpa、hibernate、mybatis之间的关系及区别

1,956 阅读3分钟

这是我参与8月更文挑战的第11天,活动详情查看:8月更文挑战

什么是jdbc

jdbc(Java DataBase Connectivity)是java连接数据库操作的原生接口。

  • JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为各个数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。
  • 一句话概括:jdbc是所有框架操作数据库的必须要用的,由数据库厂商提供,但是为了方便java程序员调用各个数据库,各个数据库厂商都要实现jdbc接口。

什么是JPA

ORM一般指对象关系映射。对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。

JPA就是 ORM 框架的规范,Hibernate 是符合 JPA 规范的,而 MyBatis 却不符合,因为 MyBatis 还是需要写 SQL 的。

jdbc和jpa的区别

  • 本质上,这两个东西不是一个层次的,jdbc是数据库的统一接口标准,jpa是orm框架的统一接口标准。用法有区别,jdbc更注重数据库,orm则更注重于java代码,但是实际上jpa实现的框架底层还是用jdbc去和数据库打交道。
  • JPA 就是 ORM 框架的规范,Hibernate 是符合 JPA 规范的,而 MyBatis 却不符合,因为 MyBatis 还是需要写 SQL 的。
  • JDBC 是面向 SQL 的,使用起来比较繁琐。所以就有了 ORM 框架,建立了 Java 对象与数据库表之间的映射关系,可以通过直接操作对象来实现持久化,简化了操作的繁杂度。

什么是jpa

jpa(Java Persistence API)是java持久化规范,是orm框架的标准,主流orm框架都实现了这个标准。

  • ORM是一种思想,是插入在应用程序与JDBC API之间的一个中间层,JDBC并不能很好地支持面向对象的程序设计,ORM解决了这个问题,通过JDBC将字段高效的与对象进行映射。具体实现有hibernate、spring data jpa、open jpa

什么是hibernate

image.png

  • 一个标准的orm框架,实现jpa接口。就是说,jpa是接口,hibernate是他的实现类
  • 对数据库提供了较为完整的封装,封装了基本的DAO层操作,有较好的数据库移植性

什么是spring data jpa

  • 对jpa规范的再次抽象,但是他没有实现JPA 规范,底层还是需要Hibernate, Eclipse Link, 或者其他的 JPA provider。
  • Spring Data JPA 极大的简化了数据库访问,可以通过命名规范、注解的方式较快的编写SQL

什么是mybatis

  • mybatis也是一个持久化框架,但不完全是一个orm框架,不是依照的jpa规范
  • 可以进行更细致的SQL优化,查询必要的字段,但是需要维护SQL和查询结果集的映射,而且数据库的移植性较差,针对不同的数据库编写不同的SQL

各个适用场景:

如果是进行底层编程,需要对性能要求高,应采用 JDBC 方式。

如果直接操作数据库表,没有过多的定制,建议使用 Hibernate 方式。

如果要灵活使用 sql 语句,建议采用 MyBatis 方式。