动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

从初识JPA到精通

08-04 17:09 173浏览
举报 T字号
  • 大字
  • 中字
  • 小字

JPAJava Persistence API)的重点在于其中间的持久性(persistence),JPAJDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。并非所有Java对象都需要持久化,但是大多数应用程序都可以持久化关键业务对象。JPA规范允许用户定义应持久化哪些对象,以及如何在Java应用程序中持久化这些对象,带大家学习如何初识JPA到精通赶紧行动起来

我们也许错误的认为JPA是一种工具或者框架,这种观点往往给我们很大的误区。实际上,JPA本身不是工具或框架;相反,它定义了可以由任何工具或框架实施的一组概念。尽管JPA的对象关系映射(ORM)模型最初是基于Hibernate的,但此后一直在发展。同样,尽管JPA最初旨在与关系/ SQL数据库一起使用,但某些JPA实现已经被扩展用于NoSQL数据存储。EclipseLink是支持JPA和NoSQL的流行框架,它是JPA 2.2的参考实现。

说到JPA就不得不说到Hibernate了,两者的关系贯穿了其整个发展历程。由于它们的历史交织在一起,Hibernate和JPA经常合并在一起。但是,就像Java Servlet规范一样,JPA产生了许多兼容的工具和框架。Hibernate只是其中之一。

Sun公司引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。如今,Hibernate ORM是最成熟的JPA实现之一,并且仍然是Java中ORM的流行选择。Hibernate ORM 5.3.8实现了JPA 2.2。此外,Hibernate的工具系列已扩展到许多流行的工具,例如Hibernate Search,Hibernate Validator和Hibernate OGM,尽管它们的执行有所不同,但是每个JPA实现都提供某种ORM层。为了了解JPA和兼容JPA的工具,我们需要来了解一下ORM。

对象关系映射是一项任务,开发人员有充分的理由避免手动执行此任务。诸如Hibernate ORM或EclipseLink之类的框架将该任务编码为一个库或框架,即ORM层。作为应用程序体系结构的一部分,ORM层负责管理软件对象的转换,以与关系数据库中的表和列进行交互。在Java中,ORM层转换Java类和对象,以便可以在关系数据库中存储和管理它们。默认情况下,要保留的对象的名称将成为表的名称,而字段将成为列。一旦建立了表,每个表行都对应于应用程序中的一个对象。对象映射是可配置的,但是默认设置往往可以正常工作。

从编程的角度看,ORM层是一个适配器层:它使对象图的语言适应SQL和关系表的语言。ORM层允许面向对象的开发人员构建持久化数据的软件,而无需离开面向对象的范例。使用JPA时,将创建从数据存储区到应用程序的数据模型对象的映射。无需定义对象的保存和检索方式,而是定义对象与数据库之间的映射,然后调用JPA来持久化它们。如果你使用的是关系数据库,那么应用程序代码与数据库之间的大部分实际连接将由JDBC(Java数据库连接API)处理。

JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是Hibernate HQL的等价物。JPA定义了独特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。

作为规范,JPA提供了元数据注释,可以使用它们来定义对象与数据库之间的映射。每个JPA实现都为JPA注释提供了自己的引擎。JPA规范还提供了PersistanceManager或EntityManager,这是与JPA系统联系的关键点。为了更加具体地了解这些注释,请参照下面的例子,它是用于建模音乐家的简单数据类。

public class Musician {

  private Long id;

  private String name;

  private Instrument mainInstrument;

  private ArrayList performances = new ArrayList();

 

  public Musician( Long id, String name){ /* constructor setters... */ }

 

  public void setName(String name){

    this.name = name;

  }

  public String getName(){

    return this.name;

  }

  public void setMainInstrument(Instrument instr){

    this.instrument = instr;

  }

  public Instrument getMainInstrument(){

    return this.instrument;

  }

  // ...Other getters and setters...

}

上面代码中的类用于保存数据。它可以包含原始数据,例如名称字段。它还可以保持与其他类(例如mainInstrument和)的关系performances。

Musician存在的原因是包含数据。这种类型的类有时称为DTO或数据传输对象。DTO是软件开发的常见功能。尽管它们保存多种数据,但它们不包含任何业务逻辑。简单地使用原始字段持久化对象只是等式的一半。JPA还具有管理彼此关联的实体的能力。表和对象中可能有四种实体关系:

1.一对多

2.多对一

3.多对多

4.一对一

每种关系类型都描述一个实体与其他实体的关系。例如,Musician实体可以与,或以集合表示的实体具有一对多关系。如果Musician包含一个Band字段,则这些实体之间的关系可能是多对一的,这意味着Musicians在单个Band类上的集合。(假设每个音乐家只在一个乐队中表演。)如果Musician包含一个BandMates字段,则可能表示与其他实体的多对多关系Musician。

最后,Musician可能与实体具有一对一的关系Quote,用来表示一个著名的报价:Quote famousQuote = new Quote()。

每个处理数据库的应用程序都应定义一个应用程序层,其唯一目的是隔离持久性代码。Java Persistence API引入了对Java对象持久性的一系列功能和支持。简单的应用程序可能不需要JPA的全部功能,并且在某些情况下,可能不值得配置框架。但是,随着应用程序的增长,JPA的结构和封装凸显出了优势,使用JPA可使目标代码保持简单,并提供用于访问Java应用程序中数据的常规框架。

能够完全领会本文所讲的内容,稍加实践你就能熟练运用JPA。而且初识JPA到精通是一过程也不之过如果觉得本文讲的不够透彻,也可以观看本站的JPA专题视频课程更加深入学习JPA知识。

0人推荐
共同学习,写下你的评论
0条评论
袋子里的小女孩
程序员袋子里的小女孩

12篇文章贡献56226字

作者相关文章更多>

推荐相关文章更多>

Java数据结构

HelloWorld10-31 08:24

浅谈MySQL中SQL优化的常用方法

军哥08-12 23:29

五分钟读懂UML类图

江湖人称小李白12-10 10:41

MyBatis开发框架的四大核心

IT逐梦者08-17 21:43

一次搞定continue,break和return

HelloWorld11-06 11:19

发评论

举报

0/150

取消