苹果|Java:Java的JPA技术是什么? ?

苹果|Java:Java的JPA技术是什么? ?

JPA(Java Persistence Annotation)是 Java 的标准解决方案 , 用于弥合面向对象的领域模型和关系数据库系统之间的差距 。 这个想法是将 Java 类映射到关系表 , 并将这些类的属性映射到表中的行 。 通过在同一编程范式中无缝协作两种不同的技术 , 这改变了 Java 编码整体体验的语义 。 本文提供了一个概述及其在 Java 中的支持实现 。

概述
关系数据库可能是计算中可用的所有持久性技术中最稳定的 , 而不是与之相关的所有复杂性 。 这是因为今天 , 即使在所谓的“大数据”时代 , “NoSQL”关系数据库的需求量也一直在增长 。 关系数据库是稳定的技术 , 不仅仅是文字 , 而是它多年来的存在 。 NoSQL 可能适合处理企业中的大量结构化数据 , 但通过关系数据库更好地处理大量事务性工作负载 。 此外 , 还有一些与关系数据库相关的出色分析工具 。
为了与关系数据库进行通信 , ANSI 标准化了一种称为 SQL(结构化查询语言)的语言 。 用这种语言编写的语句可用于定义和操作数据 。 但是 , SQL 处理 Java 的问题是它们的语法结构不匹配 , 并且在核心上非常不同 , 这意味着 SQL 是过程性的 , 而 Java 是面向对象的 。 因此 , 寻求一种可行的解决方案 , 使 Java 可以以面向对象的方式说话 , 并且关系数据库仍然能够相互理解 。 JPA 是该调用的答案 , 并提供了在两者之间建立工作解决方案的机制 。
与对象映射相关
Java 程序通过使用 JDBC(Java 数据库连接)API 与关系数据库进行交互 。 JDBC 驱动程序是连接的关键 , 它允许 Java 程序使用 JDBC API 操作该数据库 。 建立连接后 , Java 程序以字符串的形式触发 SQL 查询 , 以传达创建、插入、更新和删除操作 。 这对于所有实际目的都足够了 , 但从 Java 程序员的角度来看是不方便的 。 如果可以将关系表的结构改造成纯 Java 类 , 然后你可以以通常的面向对象的方式处理它们会怎样? 关系表的结构是以表格形式对数据进行逻辑表示 。 表由描述实体属性的列组成 , 行是实体的集合 。
根据 Java Persistence 2.1 规范 , JPA 增加了对模式生成、类型转换方法、在查询和查找操作中使用实体图、不同步的持久性上下文、存储过程调用以及注入实体侦听器类的支持 。 它还包括对 Java Persistence 查询语言、Criteria API 和本机查询映射的增强 。
简而言之 , 它尽一切努力提供一种错觉 , 即在处理关系数据库时没有过程部分 , 一切都是面向对象的 。

JPA 实施
JPA 描述了 Java 应用程序中的关系数据管理 。 它是一个规范 , 并且有许多实现 。 一些流行的实现是 Hibernate、EclipseLink 和 Apache OpenJPA 。 JPA 通过 Java 类中的注释或 XML 配置文件定义元数据 。 但是 , 我们可以同时使用 XML 和注释来描述元数据 。 在这种情况下 , XML 配置会覆盖注释 。 这是合理的 , 因为注解是用 Java 代码编写的 , 而 XML 配置文件是 Java 代码的外部文件 。 因此 , 以后需要对元数据进行更改(如果有的话);在基于注解的配置的情况下 , 它需要直接访问 Java 代码 。 这可能总是不可能的 。 在这种情况下 , 我们可以在 XML 文件中编写新的或更改的元数据配置 , 而无需对原始代码进行任何更改 , 并且仍然具有预期的效果 。 这是使用 XML 配置的优势 。 但是 , 基于注解的配置使用起来更方便 , 是程序员的流行选择 。
由于 Red Hat , Hibernate 是所有 JPA 实现中最流行和最先进的 。 除了 JPA 实现之外 , 它还使用自己的调整和附加功能 。 它拥有更大的用户社区 , 并且有据可查 。 一些额外的专有功能是支持多租户、在查询中加入不关联的实体、时间戳管理等 。
EclipseLink 基于 TopLink , 是 JPA 版本的参考实现 。 除了一些有趣的专有特性(例如多租户支持、数据库更改事件处理等)之外 , 它还提供标准 JPA 功能 。
结论
【苹果|Java:Java的JPA技术是什么? ?】JPA 和持久性上下文的核心术语比这里说的要广泛 , 但是从快速概述开始比冗长的复杂脏代码及其概念细节要好 。 如果你在核心 JDBC 方面有一点编程经验 , 那么你无疑会欣赏 JPA 如何让你的编码生活变得更简单 。