前言
JPA, 全称Java Persistence API,翻译为JAVA持久层应用接口,JPA本身并不是一个框架,它本质上是一种ORM规范,Hibernate是一个框架,也是JPA的一种实现。
JPA的优势
- 标准化: 提供相同的 API,这保证了基于 JPA 开发的企业应用能够经过少量的修改就能够在不同的 JPA 框架下运行。
- 简单易用,集成方便: JPA 的主要目标之一就是提供更加简单的编程模型,在 JPA 框架下创建实体和创建 Java 类一样简单,只需要使用 javax.persistence.Entity 进行注解;JPA 的框架和接口也都非常简单。
- 可媲美JDBC的查询能力: JPA的查询语言是面向对象的,JPA 定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。
- 支持面向对象的高级特性: JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型。
Java三层架构
刚才我们说JPA是JAVA持久层应用接口,那什么是持久层呢?
Java有三层架构,分别为持久层,业务层和表现层。
我们简称为SSH,即Struts(表示层)+Spring(业务层)+Hibernate(持久层)。
Struts是一个表示层框架,进行流程控制,主要作用是页面展示,发送请求,接受请求,
Spring就是我们熟知的后端框架,进行业务流转,
Hibernate是一个持久层框架,它只负责与关系数据库的操作。
Hibernate
我们原来使用JDBC连接来读写数据库,我们最常见的就是打开数据库连接、使用复杂的SQL语句进行读写、关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常烦琐的过程。这时出现了Hibernate框架,它需要你创建一系列的持久化类,每个类的属性都可以简单的看做和一张数据库表的属性一一对应。这样我们不用在关注数据库,只需要持久化类就可以完成增删改查的功能。使我们的软件开发真正面向对象, 而不是面向混乱的代码。
JPA中的注释
@Entity注释
持久对象有时称为实体。附加@Entity
到类,此类告知JPA应该保留此类及其对象。
具有此注释的klass
类。
@Entity
public class Klass {
...class body
}
@Table注释
告诉JPA将实体(Klass
类)持久化到Klass
表中。参数name
默认为实体名称,因此如果实体名称与映射的表名称一致时,@Table
注解常常可以省略。如下所示。
@Entity
@Table(name="klass")
public class Klass {
...class body
}
指定主键
我们使用JPA的@Id
注释将id
字段指定为Klass
主键。用@GeneratedValue(strategy = GenerationType.IDENTITY)
定义主键自增属性。
@Entity
public class Klass {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}
定义关系类型
实体(数据表)与实体间的关系分为以下四种:1对1,1对多,多对1,多对多;在英文中分别是OneToOne、OneToMany、ManyToOne、ManyToMany,在JPA声明多对一外键如下
@ManyToOne
private Teacher teacher;
总结
使用JPA大大简化了我们构造数据库的的过程,也是我们的过程面向对象,并且在团队开发中,也使得代码与本地数据库一致。Spring Data JPA
也是JPA
,它更简单、更强大。
参考
什么是JPA?Java Persistence API简介
What is JPA? Introduction to the Java Persistence API
Spring Boot2 系列教程(二十三)理解 Spring Data Jpa
java三层架构:持久层、业务层、表现层的理解
第一节 JPA初始化数据表
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。