持久化API(JPA)系列(一)实体简介

J2EE规范制订了EntityBean规范来解决应用程序的持久化问题,但由于设计得过于复杂等缺陷,因此在EJB规范中饱受诟病。

随后,大量开源ORM框架(如Hibernate)出现。这些ORM框架不仅简单、易用,而且也可以面向对象的方式来操作关系数据库,并提供强大的数据查询功能。慢慢地,这些ORM框架不断替代EntityBean。

当Sun公司制订JavaEE5规范时,Sun公司彻底抛弃了原来的EntityBean,而是推出了新的JPA规范·Sun公司的JPA以Entity为核心,它将实体映射到底层数据表,然后通过在应用程序中使用JPA的EntityManager来操作Entity,而JPA实现则会将这种操作转换为对底层数据表的操作。

需要注意的一点是:JPA只是一种规范!并不是任何具体的ORM框架!当在程序中使用JPA进行持久化时,底层一定需要具体的ORM框架作为实现。

EJB3的实体(Entity)是充分吸收ORM(Object/RelationMapping)思想之后的产物。

常见的ORM框架,如:EntityEJB、Hibernate、IBATIS、TopLink、OJB

(一)对象关系数据库映射(ORM)

ORM的全称是Object/RelationMapping,对象/关系数据库映射·ORM可理解成一种规范,它概述了这类框架的基本特征,完成面向对象的编程语言到关系数据库的映射。当ORM框架完成映射后,既可利用面向对象程序设计语言的简单易用性,又可利用关系数据库的技术优势。因此,我们可把ORM框架当成应用程序和数据库的桥梁。

当我们使用一种面向对象的程序设计语言来进行应用开发时。从项目开始起一直采用的是面向对象分析、面向对象设计、面向对象编程,但到了持久层数据库访问时,又必须重返关系数据库的访问方式·这是一种非常糟糕的感觉。于是我们需要一种工具,它可以把关系数据库包装成面向对象的模型。这个工具就是ORM框架。

随着面向对象思想的发展,又出现了面向对象数据库(不作为本文重点)

面向对象的程序设计语言的优势:

    1. 面向对象的建模、操作
    2. 多态、继承。
    3. 摈弃难以理解的过程。
    4. 简单易用,易理解。

关系数据库系统较之面向对象语言的优势,比如:

    1. 大量数据查找、排序。
    2. 集合数据连接操作、映射
    3. 数据库访问的并发、事务
    4. 数据库的约束、隔离

面对这种面向对象语言与关系数据库系统并存的局面,采用ORM就变成一种必然。

JPA实现的作用就是:把对实体的操作,转换成对数据库的操作。这样应用程序就能以面向对的方式操作实体,而JPA实现则负责转换成对应的SQL(结构化查询语言)操作。

JPA规范本质上就是一种ORM规范,注意,不是ORM框架。因为JPA并未提供ORM实现。它只是制订了一些规范,提供了一些编程的API接口,但真体实现则由应用服务器厂商来提供实现。JBOSS应用服务器底层就以Himate作为JPA实现

开发者面向JPA规范的接口,但底层的JPA实现可以任意切换。

(二)JPA映射规则

  • 数据表映射实体类。

    • 当使用这个实体类来创建实例,修改属性,删除实体时,系统会自动转化为对这个表进行CRUD操作
  • 数据表的行映射实体对象
  • 数据表的列(字段)映射实体的属性

基于这种基本的映射方式,JPA规范就完成对象模型和关系模型之间的相互映射。由此可见,在JPA规范中,实体只是一种中间媒介,应用程序只需操作实体对象,ORM框架则负责将这种操作转化为对底层数据库的操作。

(这种转化对开发者透明,开发者无须关心!从而使得开发者从关系型数据库模式中解脱出来,以面向对象的思维操作关系型数据库。)

(三)JPA规范简介

JPA规范并不属于以EJB规范,它是一套完全独立的规范。

JPA不仅可以在基于以EJB的JavaEE应用程序中使用,而且完全可以在普通JavaSE应用程序中使用。

在JPA操作过程中,最常用的3种组件如下:

(1)实体

就是一个普通的POJO,只是为它增加了orm.xml映射文件或Annotation。

目的:建立实体和底层数据表之间的对应关系。

(2)EntityManager

实体只是和底层数据表具有映射关系的POJO,它本身并没有任何持久化能力,只有使用EntityManager来对实体进行操作时,JPA规范才可将这种操作转换为对底层数据库的操作。JPA规范的EntityManager的作用有点类似于Hibernate框架的Session。

与Hibernate中session类似的是,当程序需要使用JPA添加、删除、更新实体时,应用程序都需要使用EntityManager这个接口来完成·除此之外,如果应用程序需要检索实体,则通过EntityManager根据JPQL创建Query对象来实现。

(3)JPQL查询

类似于Hibernate提供的HQL查询语言,JPA提供了JPQL查询语言。

这种查询语言非简单、易用,可以非常方便地检索己保存的实体·JPA提供了一个Query接口来执行查询,EntityManager根据己有的JPQL来创建Query对象,然后由Query对象来执行查询。

总结:

JPA实现的作用就是:把对实体的操作,转换成对数据库的操作。这样应用程序就能以面向对的方式操作实体,而JPA实现则负责转换成对应的SQL(结构化查询语言)操作。

JPA只是一种规范!并不是任何具体的ORM框架!当在程序中使用JPA进行持久化时,底层一定需要具体的ORM框架作为实现。

时间: 2024-12-26 10:48:54

持久化API(JPA)系列(一)实体简介的相关文章

Spring Data Jpa系列教程--------实体解析和关联关系

Spring Data Jpa是基于HIbernate开发的,所以建立实体建的实体和映射关系需要好好好的去了解一下,本文有以下内容,实体管理器介绍,实体与数据库表的映射介绍,关联关系(一对多,多对多)介绍,SpringDataJpa应用分析 ------实体管理器   实体管理器EntityManager是实体与数据库的桥梁(和事务一起发挥作用),相当于Hibenrtae中的session,Mybatis中的sqlSession.使用方法放个小例子吧 @PersistenceContext pr

持久化API(JPA)系列(二)实体入门

上一篇文中我们讲述了<持久化API(JPA)系列(一)实体简介> JPA实现的作用就是:把对实体的操作,转换成对数据库的操作.这样应用程序就能以面向对象的方式操作实体,而JPA实现则负责转换成对应的SQL(结构化查询语言)操作. JPA只是一种规范!并不是任何具体的ORM框架!当在程序中使用JPA进行持久化时,底层一定需要具体的ORM框架作为实现. 本文核心: 接下来我们先介绍一个入门级的JPA实例,通过这个实例读者可以感受到JPA的简单.易用性. 您会发现JPA执行持久化操作和使用Hiber

持久化API(JPA)系列(八)实体关系映射(ORM)之单表映射@EmbeddedId

接上文<持久化API(JPA)系列(七)实体关系映射(ORM)之单表映射@IdClass> 本文将介绍<联合主键:使用@EmbeddedId嵌入外部主键> 上文是通过@IdClass引用外部主键,联合主键也可以采用嵌入式主键替代. 1)新建外部主键类Family2.java 设置联合主键man和woman,因此外部主键也需要定义两个相同的变量,并添加一个以两个变量为输入的构造函数,同时添加getter/setter函数. 主键类必须满足: 1.必须实现Serializable接口,

持久化API(JPA)系列(五)控制实体Bean的生命周期

上篇文章<持久化API(JPA)系列(四)管理器EntityManager--执行数据库更新>中我们讲解了使用实体管理器的各种函数操作数据库的方法. 本文主要讲:控制实体Bean的生命周期. 与会话Bean类似,实体Bean也有自己的生命周期,分别对应不同的状态. 下面我们首先来讲解实体Bean的状态和生命周期事件: 1.实体Bean生命周期的4种状态 2.实体Bean的事件: @PostLoad @PrePersist和@PostPersist @PreUpdate和@PostUpdate

持久化API(JPA)系列(六)实体关系映射(ORM)之映射类型

ORM实体关系映射,即将数据库中的数据表及表之间的关系,通过实体Bean及实体Bean之间的关系表现出来,实现通过操作实体Bean来操作数据库. ORM(Object-Relation-Map),其中Object表示实体Bean,Relation表示数据表,Map表示实体Bean与数据表的映射. 由于EJB3中的实体Bean采用JPA框架,因此这里的ORM就是指JPA映射.它的作用也类似于Hibernate.iBATIS.JDO.TopLink等持久化层框架中的实体关系映射. 根据表与表之间的关

持久化API(JPA)系列(四)管理器EntityManager--执行数据库更新

EntityManager是应用访问持久化上下文中的实体的接口,用来对实体Bean进行操作.我们可以使用它来创建.删除.修改持久化的实体,以体现到数据库中:也可以从数据库中查询得到实体或实体列表.所有的这些操作都是通过实体管理器进行的. 本文将首先讲解EntityManager对象的引用方式,然后讲解使用EntityManager的操作函数实现数据库的各种操作,包括以下内容. 持久化实体persist():往数据表中插入数据. 删除实体remove():从数据表中删除记录. 更新实体merge(

java持久化API

一.简介 JPA(java持久化API)以Enitity为核心,主要功能是将实体映射到底层数据库表,然后通过在应用程序中使用JPA的EntityManager来操作Entity,而JPA实现则将这种操作转换为对底层数据表的操作. JPA是规范,并不是任何具体的ORM框架,所以在系统中使用JPA时,只是用的规范,具体还是会有一种ORM的实现,例如Hiernate,TopLink等. 如图所示是JPA和ORM框架之间的关系 二.JPA规范简介 JPA操作过程中,最常用的三种组件: 1.实体 实体其实

APache PDFbox API使用(1)----简介

由于项目的需要,最近在学习APache  PDFbox API,Apache PDFbox API是Apache Java 开源社区中个一个项目,其受Apache 版权 V2的保护,其提供了下面的功能: (1)文本的提取 即在PDF文件里面把文本内容提取出来. (2) 合并和拆分PDF文档 可以把几个PDF合并成一个PDF文件,也可以把一个PDF文件拆分成多个PDF文件. (3) 表单填充 从PDF文件的表单中提取数据或者写入数据到PDF表单中. (4) PDF/A的校验 根据PDF/A ISO

循序渐进学.Net Core Web Api开发系列【8】:访问数据库(基本功能)

系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇讨论如何连接数据库,包括连接SQL Server 和 连接MySQL,然后做一些基本的数据操作. 二.连接SQL Server 首先通过NuGet添加相关的包: 新建一个实体类: public class Product { [Key] public string Code { get; set; } p