工作生活

JPA 介绍和结构

2019-07-02  本文已影响0人  WenxuanLi

李文轩 2019-07-02


参考:

https://www.tutorialspoint.com/jpa/jpa_introduction.htm
https://www.tutorialspoint.com/jpa/jpa_architecture.htm
https://www.tutorialspoint.com/jpa/jpa_orm_components.htm


JPA所要解决的问题

JAVA对象与关系型数据库间的不对等

在关系型数据库中,对象都是以表的方式呈现的;Java对象则是以一种互联图(interconnected graph)的方式呈现。当Java程序在关系型数据库中进行读写行为时,一些不对等就会出现:

  1. 粒度(Granularity):Java对象一般比关系型数据库的记录有更大的粒度
  2. 继承(Subtypes):所有类型的关系型数据库都不支持对象的继承关系
  3. 唯一性(Identity):Java中靠 equals 方法检查对象唯一性,关系型数据库是靠主键
  4. 关联(Association): Java对象是靠引用表明对象之间的关系,关系型数据库是靠外键
  5. 数据导向(Data Navigation):对象之间的关系在这两个模式中都不一样

类结构

javax.persistence package

以下类和接口都是被用作将 Java 实体 当作一条记录,储存到关系型数据库中。有效地减少把数据写入数据库的代码,让程序员把注意力放在业务和更重要的事情中,像是把类映射到数据库的表中。


JPA类之间的关系

JPA类之间关系图

Object Relation Mapping (ORM)

ORM的架构

image

这张图解释了对象类型的数据是如何分三个阶段储存到关系型数据库的。

  1. Object data 阶段(对象类型数据)
    • POJO类,服务型接口和类
    • 主要的业务组件层,包含各种业务逻辑与属性
    • 员工例子:POJO类中可能包括一些通用属性,比如 ID,名字,薪资和岗位;还可能包括这些属性的getter和setter的方法。而 DAO/服务层的类则会包括一些员工实体的操作的方法,比如CRUD。
  2. 映射阶段(持久)
    • 应该包括 JPA的实现方案,映射文件(ORM.xml),JPA加载器,和对象网格
    • JPA实现方案:一些JPA的自定义的实现方案,像是 Hibernate 和 Mybatis
    • 映射文件:包含POJO类的数据和关系型数据库中的数据之间的 mapping configuration
    • JPA 加载器:像缓存一样,可以加载关系型的格状数据。它就像一个和POJO数据的服务层(类)交互的数据库复本
    • 对象网格:是一个可以临时储存关系型数据的地方,像是缓存。所有对数据库的 query 都会先影响对象网格中的数据。只有在对象网格 committed之后,这些新的改变才会影响主数据库。
  3. Relational data 阶段(关系型数据)
    • 包含着逻辑上与业务组件相连的关系型数据
    • 只有在业务组件确认数据的改动后,这个阶段才会实际上改变数据库中的数据。
    • 在业务组件确认之前,所有修改和查询数据的操作只会影响在这个缓存中,以网格的格式。
上一篇下一篇

猜你喜欢

热点阅读