3

前言

JPA, 全称Java Persistence API,翻译为JAVA持久层应用接口,JPA本身并不是一个框架,它本质上是一种ORM规范,Hibernate是一个框架,也是JPA的一种实现。
image.png

JPA的优势

  1. 标准化: 提供相同的 API,这保证了基于 JPA 开发的企业应用能够经过少量的修改就能够在不同的 JPA 框架下运行。
  2. 简单易用,集成方便: JPA 的主要目标之一就是提供更加简单的编程模型,在 JPA 框架下创建实体和创建 Java 类一样简单,只需要使用 javax.persistence.Entity 进行注解;JPA 的框架和接口也都非常简单。
  3. 可媲美JDBC的查询能力: JPA的查询语言是面向对象的,JPA 定义了独特的JPQL,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。
  4. 支持面向对象的高级特性: JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型。

Java三层架构

刚才我们说JPA是JAVA持久层应用接口,那什么是持久层呢?
Java有三层架构,分别为持久层,业务层和表现层。
我们简称为SSH,即Struts(表示层)+Spring(业务层)+Hibernate(持久层)。
Struts是一个表示层框架,进行流程控制,主要作用是页面展示,发送请求,接受请求,
Spring就是我们熟知的后端框架,进行业务流转,
Hibernate是一个持久层框架,它只负责与关系数据库的操作。
image.png

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初始化数据表


小强Zzz
1.2k 声望32 粉丝