当前位置: 首页 > article >正文

JPA、Hibernate、 Spring Data JPA 以及Mybatis的关系(Java)

一、JPA是啥?

本质:是 Java EE 的 ORM 规范(定义接口和注解,如 @Entity, @Table),不提供具体实现。 (在我看来他就是个标准,就是你怎么写都得按人家标准来,不然就不行!)

作用:统一 ORM 技术的标准,避免不同框架(如 Hibernate、EclipseLink)的 API 差异

二、JPA、Hibernate 与 Spring Data JPA 的关系

Hibernate

  • 本质:是一个 ORM 框架,是 JPA 规范的 最流行实现(同时扩展了 JPA 的功能)。
  • 与 JPA 的关系:Hibernate 早于 JPA 出现,后来遵循 JPA 规范并成为其实现之一。

Spring Data JPA

  • 本质:是 Spring 对 JPA 的 抽象增强层,简化了 JPA 的使用(如自动生成 CRUD 方法)。
  • 底层实现:默认依赖 Hibernate,但可通过配置切换为其他 JPA 实现(如 EclipseLink)。
  • 与 Spring 的集成:Spring Boot 通过 spring-boot-starter-data-jpa深度集成 Hibernate,开发者无需手动配置。

Spring Data JPA 不是 ORM 框架,而是基于 JPA 规范(默认用 Hibernate 实现)的增强工具链
三者关系
Spring Data JPA → 依赖 JPA 规范 → 默认由 Hibernate 实现。 (JPA 是规范,Hibernate 是其实现,Spring Data JPA 是 Spring 对 JPA 的增强。 )

三、常用的Mybatis是ORM框架么?

(1)什么是ORM?

ORM(Object-Relational Mapping)框架的核心目标是 通过对象操作数据库,并实现以下自动化:

  1. 对象与表的映射:自动将对象属性与数据库表的字段关联。
  2. SQL 生成:根据对象操作(如保存、查询)自动生成对应的 SQL。
  3. 关系管理:自动处理对象之间的关联(如一对一、一对多)。

典型 ORM 框架:Hibernate、EclipseLink、JPA 实现等

(2)Mybatis

本质

是一个 SQL 映射框架(核心是 SQL 与 Java 对象的解耦)。

与 ORM 的区别
    • ORM 框架(如 Hibernate):通过对象操作数据库,自动生成 SQL,强调对象与表的映射。
    • MyBatis:需手动编写 SQL,仅将 SQL 结果映射到对象,不强调对象与表的严格映射。
    • 关键差异:MyBatis 不自动生成 SQL,开发者需直接控制 SQL 逻辑,因此它更偏向“SQL 友好”而非“ORM 自动化”。

映射过程:

MyBatis 的映射过程分为两步:

    1. 手动编写 SQL:开发者完全控制 SQL 的编写(支持动态 SQL)。
    2. 定义结果映射规则:通过 XML 或注解,将 SQL 查询结果的列与 Java 对象的属性(或字段)一一映射

关键点:

    • 不自动生成 SQL:开发者需要手动编写所有 SQL,但可以精细控制其逻辑。
    • 半自动映射:MyBatis 不会自动推断对象与表的关系,需显式配置映射规则(但支持部分自动映射)。
总结


MyBatis 不属于传统 ORM 框架,而是 SQL 为中心的轻量级持久层框架

但是Mybatis同样能解决这个映射的问题,只不过需要去配置。

MyBatis 与 Hibernate/JPA 的 ORM 对比

特性

Hibernate/JPA

MyBatis

SQL 生成

自动生成(可自定义)

完全手动编写

映射方式

全自动(基于注解/XML 配置)

半自动(需显式配置 <resultMap>

对象-表关系

强制对象与表结构一致

对象与表结构无需严格对应

灵活性

较低(受限于 ORM 抽象层)

极高(完全控制 SQL 和映射逻辑)

适用场景

简单 CRUD、快速开发

复杂 SQL、高性能优化、遗留系统

如何选择?

  • JPA/Hibernate
    • 适合:对象模型与数据库表结构一致、追求开发效率、无需复杂 SQL 的场景。
    • 优点:代码简洁、自动化程度高、支持缓存/延迟加载等高级特性。
    • 缺点:复杂 SQL 需要学习 JPQL/HQL,性能优化依赖框架理解。
  • MyBatis
    • 适合:需要精细控制 SQL、处理复杂查询或遗留数据库(表结构不规范)的场景。
    • 优点:SQL 完全可见、灵活调优、无侵入性。
    • 缺点:需手动编写大量 SQL 和映射代码。

http://www.kler.cn/a/611483.html

相关文章:

  • ctfshow做题笔记—栈溢出—pwn73、pwn74
  • AR沙盘模型制作技术解析,赋能企业展厅创新
  • 线性模型与非线性扩展
  • 管道(Linux)
  • SpringCould微服务架构之Docker(2)
  • 使用Ollama(自定义安装位置)与RagFlow构建本地知识库
  • WPF 与 C# 融合开发:从基础到高级应用(一)
  • Mysql update更新数据执行流程
  • Maven工具学习使用(四)——仓库
  • 智能科技与美学融合,赵伟辰荣膺 2025 iF 设计大奖
  • 量化研究--小果聚宽交易系统上线高速服务器,提供源代码
  • C#从入门到精通(2)
  • Java在2025年的新趋势与应用
  • 【MVCC快照如何实现】
  • 【MySQL篇】DEPENDENT SUBQUERY(依赖性子查询)优化:从百秒到秒级响应的四种优化办法
  • MongoDB 与 Elasticsearch 使用场景区别及示例
  • STL之string
  • 鸿蒙 一多适配/屏幕适配/设备适配/分栏
  • Java共享自习室系统全方位技术解析与实战搭建指南
  • C++:函数(通识版)