热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java:Java的JPA技术是什么?​

JPA(JavaPersistenceAnnotation)是Java的标准解决方案,用于弥合面向对象的领域模型和关系数据库系统之间的差距。这个想法是将Java类映射

 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 功能。

  结论

  JPA 和持久性上下文的核心术语比这里说的要广泛,但是从快速概述开始比冗长的复杂脏代码及其概念细节要好。如果你在核心 JDBC 方面有一点编程经验,那么你无疑会欣赏 JPA 如何让你的编码生活变得更简单。


推荐阅读
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 本文对SQL Server系统进行了基本概述,并深入解析了其核心功能。SQL Server不仅提供了强大的数据存储和管理能力,还支持复杂的查询操作和事务处理。通过MyEclipse、SQL Server和Tomcat的集成开发环境,可以高效地构建银行转账系统。在实现过程中,需要确保表单参数与后台代码中的属性值一致,同时在Servlet中处理用户登录验证,以确保系统的安全性和可靠性。 ... [详细]
  • Java毕业设计项目:“传情旧物”网站(含源码与数据库)
    本项目介绍了如何配置和运行“传情旧物”网站,包括所需的技术栈、环境配置以及具体的操作步骤。 ... [详细]
  • 基于试题数据的智能化管理平台采用Java语言进行面向对象编程,旨在构建一个高效的试题信息管理系统。该系统在JDK 6.0和MyEclipse 10.6环境下开发,通过优化试题数据管理和处理流程,提升系统的稳定性和用户体验。平台支持多用户操作,具备强大的数据处理能力和灵活的扩展性,适用于各类教育机构和考试组织。 ... [详细]
  • 如何撰写适应变化的高效代码:策略与实践
    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • Nacos 0.3 数据持久化详解与实践
    本文详细介绍了如何将 Nacos 0.3 的数据持久化到 MySQL 数据库,并提供了具体的步骤和注意事项。 ... [详细]
  • SQL 连接详解与应用
    本文详细介绍了 SQL 连接的概念、分类及实际应用,包括内连接、外连接、自连接等,并提供了丰富的示例代码。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • Eclipse安装教程:解决Genymotion配置中的疑难杂症
    Eclipse安装教程:解决Genymotion配置中的疑难杂症 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • 在基于.NET框架的分层架构实践中,为了实现各层之间的松散耦合,本文详细探讨了依赖注入(DI)和控制反转(IoC)容器的设计与实现。通过合理的依赖管理和对象创建,确保了各层之间的单向调用关系,从而提高了系统的可维护性和扩展性。此外,文章还介绍了几种常见的IoC容器实现方式及其应用场景,为开发者提供了实用的参考。 ... [详细]
author-avatar
小菜鸟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有