【前言】
最近小编在做项目中使用了JPA文件和数据库进行交互,对这块的知识不是很了解,所以查了一下资料,在这里总结一下。
【正文】
通常,Java开发人员使用大量代码,或使用专有框架与数据库进行交互,而使用JPA,与数据库交互的负担显着降低。它形成对象模型(Java程序)和关系模型(数据库程序)之间的桥梁。
关系和对象模型之间的不匹配
关系对象以表格格式表示,而对象模型则以对象格式的互连图形表示。在从关系数据库存储和检索对象模型的同时,由于以下原因导致一些不匹配:
粒度:对象模型比关系模型具有更多的粒度。
子类型:所有类型的关系数据库都不支持子类型(意味着继承)。
身份:像对象模型一样,关系模型在写平等时不会暴露身份。
关联:关系模型在查找对象域模型时不能确定多个关系。
数据导航:对象网络中的对象之间的数据导航在两种模型中都是不同的。
什么是JPA?
Java Persistence API是将大量数据持久存储到由Oracle Corporation提供的数据库中的类和方法的集合。
在哪里使用JPA?
为了减少编写关系对象管理代码的负担,程序员遵循“JPA提供程序”框架,可以轻松与数据库实例进行交互。这里所需的框架由JPA接管。
JPA历史
早期版本的EJB,定义的持久层与业务逻辑层结合使用javax.ejb.EntityBean接口。
引入EJB 3.0时,持久层被分离并指定为JPA 1.0(Java Persistence API)。该API的规格与2006年5月11日使用JSR 220的JAVA EE5规范一起发布。
作为Java社区流程JSR 317的一部分,2009年12月10日发布了JPA 2.0的JAVA EE6规范。
JPA 2.1在2013年4月22日使用JSR 338发布了JAVA EE7的规范。
JPA供应商
JPA是一个开放源代码API,因此Oracle,Redhat,Eclipse等各种企业级供应商通过在其中添加JPA持久性来提供新产品。其中一些产品包括:
Hibernate,Eclipselink,Toplink,Spring Data JPA等
JPA结构
Java Persistence API是将业务实体存储为关系实体的源。它显示了如何将PLAIN OLD JAVA对象(POJO)定义为实体,以及如何管理具有关系的实体。
类级结构
下图显示了JPA的类级体系结构。它显示了JPA的核心类和接口。
下表描述了上述架构中显示的每个单元。
单位 | 描述 |
---|---|
EntityManagerFactory的 | 这是EntityManager的工厂类。它创建和管理多个EntityManager实例。 |
EntityManager的 | 它是一个接口,它管理对象的持久化操作。它的工作原理就像Factory的Query实例一样。 |
实体 | 实体是持久性对象,作为记录存储在数据库中。 |
EntityTransaction | 它与EntityManager具有一对一的关系。对于每个EntityManager,操作由EntityTransaction类维护。 |
坚持 | 此类包含静态方法来获取EntityManagerFactory实例。 |
询问 | 该接口由每个JPA供应商实现,以获得满足标准的关系对象。 |
上述类和接口用于将实体作为记录存储到数据库中。它们通过减少编写用于将数据存储到数据库中的代码来帮助程序员,以便他们可以专注于更重要的活动,例如编写用于使用数据库表映射类的代码。
JPA类关系
在上述架构中,类和接口之间的关系属于javax.persistence包。下图显示了它们之间的关系。
-
EntityManagerFactory和EntityManager之间的关系是一对多的。它是EntityManager实例的工厂类。
-
EntityManager和EntityTransaction之间的关系是一一对应的。对于每个EntityManager操作,都有一个EntityTransaction实例。
-
EntityManager和Query之间的关系是一对多的。可以使用一个EntityManager实例执行许多查询。
-
EntityManager和Entity之间的关系是一对多的。一个EntityManager实例可以管理多个实体
【总结】
JPA要了解的东西还是很多的,在一下篇中我们接着了解,敬请期待。