运维.售后
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
博客
Blog
ToB门户
了解全球最新的ToB事件
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
JPA 入门实战(1)--简介
JPA 入门实战(1)--简介
鼠扑
金牌会员
|
2022-9-16 17:17:31
|
显示全部楼层
|
阅读模式
楼主
主题
941
|
帖子
941
|
积分
2823
JPA(Java Persistence API) 是 SUN 公司推出的一套 ORM 规范,充当 Java 对象和关系数据库系统之间的桥梁;本文主要介绍其基本概念。
1、JPA 发展历史
JPA 1.0:于 2006 年发布
JPA 2.0:于 2009 年末发布
JPA 2.1:于 2013 年发布,它有如下重要特性:
1、Named Stored Procedure Query
2、Stored Procedure Query
3、Attribute Converter
4、Constructor Result Mapping
5、Programmatic Named Queries
6、Named Entity Graph
7、Entity Graph
8、JPQL Enhancements
9、Criteria API Bulk Operations
10、Unsynchronized Persistence Context
11、Generating DB Schema
12、CDI-Support in Entity Listener
详细说明可查看:https://thorben-janssen.com/jpa-21-overview/
JPA 2.2:于 2017 年发布,它有如下重要特性:
1、Stream query results
2、Make annotations @Repeatable
3、Support Java 8 Date and Time API
4、Support CDI Injection in AttributeConverters
5、Change Persistence Provider Discovery Mechanism for Java 9 Modules
6、Summary
详细说明可查看:https://thorben-janssen.com/whats-new-in-jpa-2-2
JPA 3.0:与 2020 年发布,它有如下变化:
1、包名修改,从 javax.persistence.* 修改为 jakarta.persistence.*
2、配置文件命名空间修改,从 http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd 改为 https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd
2、JPA 提供商
JPA 只是一个规范,定义了一些接口,没有提供实现;提供实现 JPA 规范的产品有:
Hibernate、EclipseLink、OpenJPA 等。
3、JPA 的优点
标准化
JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于 JPA 开发的企业应用能够经过少量的修改就能够在不同的 JPA 框架下运行。
容器级特性的支持
JPA 框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。
简单方便
JPA 的主要目标之一就是提供更加简单的编程模型:在 JPA 框架下创建实体和创建 Java 类一样简单,没有任何的约束和限制,只需要使用 javax.persistence.Entity 进行注释,JPA 的框架和接口也都非常简单,没有太多特别的规则和设计模式的要求,开发者可以很容易地掌握。JPA 基于非侵入式原则设计,因此可以很容易地和其它框架或者容器集成。
查询能力
JPA 的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是 Hibernate HQL 的等价物。JPA 定义了独特的 JPQL(Java Persistence Query Language),JPQL 是 EJB QL 的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。
高级特性
JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。
4、JPA 类/接口说明
类/接口描述
EntityManagerFactory
EntityManager 的工厂类,负责创建并管理 EntityManager 实例。
EntityManager
对象持久化操作的接口
Entity
实体对象
EntityTransaction
事务接口,与 EntityManager 是一对一的关系
Persistence
该类用于创建 EntityManagerFactory
Query
JPQL 查询接口,用于查询或更新数据类/接口之间的关系:
EntityManagerFactory 和 EntityManager 之间是
一对多
的关系。
EntityManager 和 EntityTransaction 之间是
一对一
.的关系,对于每个 EntityManager,都有一个 EntityTransaction。
EntityManager 和 Query 之间是
一对多
的关系,可以使用一个 EntityManager 执行多个查询。
EntityManager 和 Entity 之间是
一对多
的关系,一个 EntityManage 可以管理多个实体。
5、JPA 常用注解
注解
说明
重要属性
@Entity
声明该类是一个实体类
@Table
声明实体类对应的表名
@Id
声明该属性为主键
@GeneratedValue
声明主键的值自动生成
strategy:生成策略
generator:生成器
@SequenceGenerator
序列生成器
sequenceName:序列名
name:生成器名称
@TableGenerator
表生成器,通过表生成id
table:表名
name:生成器名称
@Column
声明属性对应的字段信息
name:字段名称
@Transient
声明该属性不持久到数据库
@NamedQuery
声明静态查询
@NamedQueries
声明一组静态查询
@OneToOne
一对一映射
@OneToMany
一对多映射
@ManyToOne
多对一映射
@ManyToMany
多对多映射
6、JPA Id 生成策略
JPA 提供四种 Id 生成策略:
GenerationType.TABLE:使用一个特定的表来保存主键
GenerationType.SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
GenerationType.IDENTITY:主键由数据库自动生成(主要是自动增长型字段)
GenerationType.AUTO:主键由 JPA 实现产品控制(默认的策略)
各数据库对策略的支持情况如下:
数据库
支持的策略
MySQL
GenerationType.TABLE
GenerationType.AUTO
GenerationType.IDENTITY
不支持 GenerationType.SEQUENCE
Oracle
GenerationType.AUTO
GenerationType.SEQUENCE
GenerationType.TABLE
不支持 GenerationType.IDENTITY
PostgreSQL
GenerationType.TABLE
GenerationType.AUTO
GenerationType.IDENTITY
GenerationType.SEQUENCE
都支持
7、JPA JPQL
JPQL(Java Persistence Query Language)是一种面向对象的查询语言,用于对持久化实体进行数据库操作。JPQL 使用实体对象模型代替数据库表来操作 SQL 查询。JPA 会将 JPQL 转换为 SQL,它为开发人员处理 SQL 任务提供了一个简单的平台。
JPQL 是实体 JavaBean 查询语言 (EJBQL) 的扩展,为其添加了以下重要功能:
它可以执行连接操作。
它可以批量更新和删除数据。
它可以执行带有排序和分组子句的聚合功能。
单值和多值结果类型。
JPQL 有如下特点:
它是一种独立于平台的查询语言。
它简单而稳定。
它可以与任何类型的数据库一起使用,例如 MySQL、Oracle。
JPQL 查询可以静态地声明到元数据中,也可以动态地构建在代码中。
8、JPA Criteria API(标准 API)
Criteria API 是一套预定义的 API,用于定义实体查询, 是替换 JPQL 查询的另一种方法。 这些查询是类型安全的、可移植的并且易于通过更改语法进行修改。 与 JPQL 类似,它遵循抽象模式(易于编辑)和对象嵌入。 元数据 API 与标准 API 混合在一起,为标准查询建模持久实体。标准 API 的主要优点是可以在编译时更早地检测到错误。 基于字符串的 JPQL 查询和基于 JPA 标准的查询在性能和效率上是相同的。
Criteria API 的历史:
在 JPA 2.0 中,开发了 Criteria API,使查询标准化。
在 JPA 2.1 中,标准更新和删除(批量更新和删除)被增加进来。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
鼠扑
金牌会员
这个人很懒什么都没写!
楼主热帖
Java 基于Apache POI实现Excel读写操作 ...
Dapr 知多少 | 分布式应用运行时 ...
XAF新手入门 - 类型子系统(Types Info ...
记录一次NoSuchMethodError问题的解决 ...
C#生成putty格式的ppk文件(支持passph ...
Python 封装SNMP调用接口
springboot开启单元测试的方法分享 ...
5.15日 搭建青龙面板教程——狗东跑跑 ...
子查询优化之 Semi-join 优化 | StoneD ...
记一次SQL注入的收获
标签云
存储
服务器
快速回复
返回顶部
返回列表