JPA入门
JPA是什么
JPA全称Java Persistence API,是一组用于将数据存入数据库的类和方法的集合。JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
JPA Providers
JPA是开源API,各企业经营商Oracle, Redhat, Eclipse等,提供各种有特色的JPA产品,其中包括: Hiberate, Eclipselink, Toplink, Spring Data JPA等等
JPA架构
JPA展示如何将Plain Oriented Java Object(POJO)定义为entity,以及如何管理entity之间的关系。
类级架构
JPA的类级架构包含几个核心组件
> EntityManagerFactory: 创建和管理多个EntityManager实例
> EntityManager: 接口,管理对象的操作(create, update, delete, Query)
> Entity: 持久化对象,在数据库中以record存储
> EntityTransaction: 与EntityManager一对一
> Persistence: 包含获取EntityManagerFactory实例的静态方法
> Query: 运营商必须实现的接口,获取满足creteria的关系对象(relational object)
ORM
当前许多应用使用关系数据库存数据。最近,供应商转向对象数据库来减少数据维护的压力。对象关系技术的核心是映射orm.xml文件。
由于xml不要求兼容,我们可以轻松修改数据源。
ORM架构
ORM通过编程的方式将对象类型转换成关系类型。主要特点是将object映射成数据库中的数据。在映射的过程中我们必须考虑数据,数据类型和数据之间的关系。

阶段一
又名Object data阶段,包括POJO类,服务接口和类。它是主要的业务层,包含业务逻辑操作和属性。比如我们考虑employ数据库的schema
> Employee POJO类包含属性:ID, name, salary, 和destination,还有这些属性的setter和getter方法
> Employee DAO/Service类包含创建employee,查找employee,和删除employee等服务方法。
阶段二
又名Mapping或者persistance阶段,包括JPA provider, mapping文件(ORM.xml), JPA Loader, 和Object Grid
> JPA provider: 运营商提供的产品,包括JPA flavor(javax.persistence中)。例如 Eclipselink, Toplink, Hibernate等等。
> Mapping文件: ORM.xml包括POJO类到关系数据库中数据的映射
> JPA Loader: JPA loader类似加载关系数据的缓存内存。
> Oject Grid: 存储关系数据的临时位置。
阶段三
关系数据阶段,包括和业务逻辑有关的关系数据。在提交之前,修改的数据导以grid格式存在缓存内存中。
以上展示了ORM的如何在三个阶段中将数据存入数据库中。
Mapping.xml
mapping.xml指示JPA vendor如恶化将entity类映射到数据库表上。
注解
一般XML用于配置特定组建或者定义两个不同组建直接直接的关系。在我们的case中,我们在写mapping.xml文件时需要将POJO类的属性和文件中entity tags对应起来。这需一定的维护开销。
另一种方案是: 在类定义中,我们可以用注解完成配置。注解用于class, properties, 和方法前。所有JPA的注解定义在javax.persistence包中。
Entity关系
Entity可以看作是关系表,因此entity类之间的关系有:
> @ManyToOne
> @OneToMany
> @OneToOne
> @ManyToMany
@ManyToOne关系
例子:employee和department的关系是多对一。department的key作为employment的外键。标注在employee内
生成employee和department两张表,其中employment包含department的key
@OneToMany关系
TableA与TableB是一对多的关系,那么TableA中的一条记录对映TableB中0或者多条记录。比如department和employee的关系。标注在department上
department_employee, department, employee
@OneToOne关系
比如一个employee只属于一个department。标注方式同@ManyToOne,在employee上。
生成employee和department两张表,其中employment包含department的key
@ManyToMany关系
比如班级和老师之间的关系。两边都需要标注。
生成三张表:teacher_class, teacher, class
Criteria API
Criteria API用来定义query,是JPQA query的另一种选择。String based JPQL query和JPA criteria based query在性能和效率方面相同。
Criteria Query Structure简单的例子
EntityManager em = ...;
CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Entity class> cq = cb.createQuery(Entity.class);
Root<Entity> from = cq.from(Entity.class); cq.select(Entity);
TypedQuery<Entity> q = em.createQuery(cq);
List<Entity> allitems = q.getResultList();
上例展示了创建criteria的基本步骤.
> EntityManager: 创建CriteriaBuilder对象
> CriteriaQuery: 创建Query对象,属性可以被修改
> CriteriaQuery.from: 设置query root
> CriteriaQuery.select: 设置结果list类型
> TypedQuery<T>: 准备执行的query,并且指明Query result的类型
> TypedQuery.getResultList: 执行query,返回一组结果,存在list中
Reference
http://www.tutorialspoint.com/jpa/jpa_entity_managers.htm
JPA入门的更多相关文章
- JPA入门例子(采用JPA的hibernate实现版本) 转
JPA入门例子(采用JPA的hibernate实现版本) jpahibernate数据库jdbcjava框架(1).JPA介绍: JPA全称为Java Persistence API ,Java持久化 ...
- JPA入门例子(采用JPA的hibernate实现版本) --- 会伴随 配置文件:persistence.xml
JPA入门例子(采用JPA的hibernate实现版本) 分类: j2se2011-03-30 16:09 45838人阅读 评论(9) 收藏 举报 jpahibernate数据库jdbcjava框架 ...
- Spring Data Jpa 入门学习
本文主要讲解 springData Jpa 入门相关知识, 了解JPA规范与Jpa的实现,搭建springboot+dpringdata jpa环境实现基础增删改操作,适合新手学习,老鸟绕道~ 1. ...
- JPA入门及深入
一:ORM介绍 ORM(Object-Relational Mapping) 表示对象关系映射.在面向对象的软件开发中,通过ORM,就可以把对象映射到关系型数据库中.只要有一套程序能够做到建立对象与数 ...
- spring data jpa入门学习
本文主要介绍下spring data jpa,主要聊聊为何要使用它进行开发以及它的基本使用.本文主要是入门介绍,并在最后会留下完整的demo供读者进行下载,从而了解并且开始使用spring data ...
- SpringBoot Jpa入门案例
版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons) 我们先来了解一下是什么是springboot jpa,springboo ...
- SpringBoot与Jpa入门
一.JPA简介 目前JPA主要实现由hibernate和openJPA等. Spring Data JPA 是Spring Data 的一个子项目,它通过提供基于JPA的Repository极大了减少 ...
- Spring Data JPA入门及深入
一:Spring Data JPA简介 Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问 ...
- 玩转spring boot——结合JPA入门
参考官方例子:https://spring.io/guides/gs/accessing-data-jpa/ 接着上篇内容 一.小试牛刀 创建maven项目后,修改pom.xml文件 <proj ...
随机推荐
- WPF Path
在WPF中,自定义控件,经常用到Path. Path可以绘制多边形.边框.线条.简单的图标等. 1.Xaml中用法: <Path Stroke="DodgerBlue" St ...
- Vmware虚拟机Devstack安装openstack(All in one)
Vmware虚拟机Devstack安装openstack(All in one) 博客园第一篇博客,先练习一下. 官方文档 环境 Vmware虚拟机 OS : Ubuntu 14.04 Nat网络,D ...
- 基于pcDuino-V2的无线视频智能小车 - pcduino上的网络编程
通过获取从串口发送上来的数据 已经和上位机的连接通信和图像发送.已经对设备的控制 https://github.com/qq2216691777/pcduino_smartcar-pcduino
- 2015最流行的Android组件、工具、框架大全
Android 是目前最流行的移动操作系统之一. 随着新版本的不断发布, Android的功能也日益强大, 涌现了很多流行的应用程序, 也催生了一大批的优秀的组件. 本文试图将目前流行的组件收集起来以 ...
- NFS指定端口
nfs服务端: 编辑/etc/nfsmount.conf,在末尾添加: RQUOTAD_PORT=30001LOCKD_TCPPORT=30002LOCKD_UDPPORT=30002MOUNTD_P ...
- ActiveMQ笔记(7):如何清理无效的延时消息?
ActiveMQ的延时消息是一个让人又爱又恨的功能,具体使用可参考上篇ActiveMQ笔记(6):消息延时投递,在很多需要消息延时投递的业务场景十分有用,但是也有一个缺陷,在一些大访问量的场景,如果瞬 ...
- NC 销售订单
主表:so_sale,主键:csaleid 子表1:so_saleorder_b 主键:corder_bid 子表2:so_saleexecute 主键:csale_bid 要求子表1和子表2 主键相 ...
- opencv3.0.1 中的SurfFeaturesFinderGpu类的问题.
最近需要实现一下图像配准的功能, 参考了一下opencv中的实现,发现几个问题, SurfFeaturesFinderGpu在找特征点的过程中会抛出异常,改了一下代码,可以运行了. void Surf ...
- 未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序。解决办法
在64位服务器系统上,默认不支持Microsoft.Jet.OLEDB.4.0的驱动程序,系统默认会提示未在本地计算机上注册"Microsoft.Jet.OLEDB.4.0"的错误 ...
- C#委托与事件
一.在控制台下使用委托和事件 我们都知道,C#中有"接口"这个概念,所谓的"接口"就是定义一套标准,然后由实现类来具体实现其中的方法,所以说"接口,是 ...