JDBC、ORM、mybatis之间的关系

JDBC

JDBC(Java DataBase Connectivity) :Java数据库连接技术,就是使用java语言操作关系型数据库的一套API(一套标准接口)。

在这里插入图片描述
在这里插入图片描述

ORM

ORM(Object Relational Mapping)对象关系映射: 用于完成Java对象与关系型数据库的映射,是JDBC的一层封装,提高了易用性。
在这里插入图片描述

JDBC 与ORM

JDBC将应用程序开发者与底层数据库驱动程序进行解耦,作为中间层承上启下,而ORM是插入在应用程序与JDBC API之间的一个中间层,JDBC并不能很好地支持面向对象的程序设计,ORM解决了这个问题,通过JDBC将字段高效的与对象进行映射。

JPA规范

JPA (Java Persistence Java)持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。JPA本身并不是一个框架,它本质上是一种ORM规范。

目前常用的ORM框架有:

  • Hibernate(JBoos开源)
  • Open JPA(apache开源)
  • Spring Data JPA(Spring框架中的子模块)
  • EclipseLink(由Oracle提供,后捐献给了Eclipse社区)
  • Toplink
    在这里插入图片描述

两个常用的ORM框架

1. Hibernate

Hibernate是一个JPA规范的具体实现,是ORM类型的框架。

Hibernate: 是一个全表映射的框架。通常开发者只需定义好持久化对象到数据库表的映射关系,就可以通过Hibernate提供的方法完成持久层操作。开发者并不需要熟悉地掌握SQL语句的编写,Hibernate会根据制定的存储逻辑,自动的生成对应的SQL,并调用JDBC接口来执行,所以其开发效率会高于Mybatis。然而Hibernate自身也存在着一些缺点,例如它在多表关联时,对SQL查询的支持较差;更新数据时,需要发送所有字段;不支持存储过程;不能通过优化SQL来优化性能等。这些问题导致其只适合在场景不太复杂且对性能要求不高的项目中使用。

2. Mybatis

Mybatis: 是一个半自动映射的框架。这里所谓的”半自动"是相对于Hibernate全表映射而言,Mybatis需要手动匹配提供POJO、SQL和映射关系,而Hibernate只需要POJO和映射关系即可。与Hibernate相比,虽然使用Mybatis手动编写SQL要比使用Hibernate的工作量大,但Mybatis可以配置动态SQL并优化SQL,可以通过配置决定SQL的映射规则,它还支持存储过程等。对于一些复杂的和需要优化性能的项目来说,显然使用Mybatis更加合适。

Mybatis是当前主流的Java持久层框架之一,它与Hibernate一样,也是一种ORM框架。因其性能优异,且具有高度的灵活性、可优化性和易于维护等特点,所以受到了广大互联网企业的青睐,是目前大型互联网项目的首选框架。

3. 谈谈MyBatis和JPA(默认采用Hibernate实现)的区别?

  1. ORM映射不同:
    MyBatis是半自动的ORM框架,提供数据库与结果集的映射;
    JPA(默认采用Hibernate实现)是全自动的ORM框架,提供对象与数据库的映射。
  2. 可移植性不同:
    JPA通过它强大的映射结构和HQL语言,大大降低了对象与数据库的耦合性;
    MyBatis由于需要写SQL,因此与数据库的耦合性直接取决于SQL的写法,如果SQL不具备通用性而用了很多数据库的特性SQL的话,移植性就会降低很多,移植时成本很高。
  3. 日志系统的完整性不同:
    JPA日志系统非常健全、涉及广泛,包括:SQL记录、关系异常、优化警告、缓存提示、脏数据警告等;
    MyBatis除了基本的记录功能外,日志功能薄弱很多。
  4. SQL优化上的区别:
    由于Mybatis的SQL都是写在XML里,因此优化SQL比Hibernate方便很多。
    而Hibernate的SQL很多都是自动生成的,无法直接维护SQL。虽有HQL,但功能还是不及SQL强大,见到报表等复杂需求时HQL就无能为力,也就是说HQL是有局限的Hhibernate虽然也支持原生SQL,但开发模式上却与ORM不同,需要转换思维,因此使用上不是非常方便。总之写SQL的灵活度上Hibernate不及Mybatis。

spirng data jpa

spirng data jpa是spring提供的一套简化JPA开发的框架,按照约定好的【方法命名规则】写dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查询等等。

Spring Data JPA 可以理解为 JPA 规范的再次封装抽象,底层还是使用了 Hibernate 的 JPA 技术实现。如图:
在这里插入图片描述

JPA、Hibernate和Spring Data JPA的关系

在这里插入图片描述

  • JPA(Java Persistence API)是规范,它指明了持久化、读取和管理Java对象映射到数据库表时的规范。
  • Hibernate则是一个ORM框架,它实现了Java对象到数据库表的映射。也就是说,Hibernate提供了JPA的实现。
  • Spring Data JPA是Spring Framework的一部分。它不是JPA的实现,而是在JPA之上提供更高层次的抽象 ,可以减少很多模板代码。而Spring Data JPA的默认实现是Hibernate,当然也可以是其他的JPA Provider。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值