个性化阅读
专注于IT技术分析

Spring Boot JPA项目示例图解

本文概述

什么是JPA?

Spring Boot JPA是用于管理Java应用程序中的关系数据的Java规范。它使我们能够在Java对象/类与关系数据库之间访问和持久化数据。 JPA遵循对象关系映射(ORM)。它是一组接口。它还提供了运行时EntityManager API, 用于处理针对数据库的对象上的查询和事务。它使用与平台无关的面向对象的查询语言JPQL(Java持久查询语言)。

在持久性方面, 它涵盖三个领域:

  • Java持久性API
  • 对象关系元数据
  • API本身, 在持久性包中定义

JPA不是框架。它定义了可以由任何框架实现的概念。

为什么要使用JPA?

与JDBC, SQL和手写映射相比, JPA更简单, 更简洁且劳动强度更低。 JPA适用于非性能导向的复杂应用程序。与JDBC相比, JPA的主要优点在于, 在JPA中, 数据由对象和类表示, 而在JDBC中, 数据由表和记录表示。它使用POJO表示持久化数据, 从而简化了数据库编程。 JPA还有其他优点:

  • JPA避免使用SQL的特定于数据库的方言编写DDL。取而代之的是, 它允许XML映射或使用Java注释。
  • JPA允许我们避免用SQL的数据库专用方言编写DML。
  • JPA允许我们完全不用任何DML语言来保存和加载Java对象和图形。
  • 当我们需要执行查询JPQL时, 它允许我们用Java实体而不是(本机)SQL表和列来表达查询。

PSD功能

JPA具有以下功能:

  • 它是一个功能强大的存储库和自定义对象映射抽象。
  • 它支持跨商店的持久性。这意味着一个实体可以部分存储在MySQL和Neo4j(图形数据库管理系统)中。
  • 它根据查询方法名称动态生成查询。
  • 域基类提供基本属性。
  • 它支持透明审核。
  • 集成自定义存储库代码的可能性。
  • 通过自定义名称空间很容易与Spring Framework集成。

JPA架构

JPA是将业务实体存储为关系实体的来源。它显示了如何将POJO定义为实体以及如何通过关系管理实体。

下图描述了JPA的类级别体系结构, 该体系结构描述了javax持久性软件包中定义的JPA的核心类和接口。 JPA体系结构包含以下单元:

  • 持久性:这是一个类, 包含用于获取EntityManagerFactory实例的静态方法。
  • EntityManagerFactory:这是EntityManager的工厂类。它创建和管理EntityManager的多个实例。
  • EntityManager:这是一个接口。它控制对对象的持久性操作。它适用于Query实例。
  • 实体:实体是将持久性对象存储为数据库中的记录。
  • 持久性单元:它定义了一组所有实体类。在应用程序中, EntityManager实例对其进行管理。实体类的集合表示单个数据存储中包含的数据。
  • EntityTransaction:它与EntityManager类具有一对一的关系。对于每个EntityManager, 操作由EntityTransaction类维护。
  • 查询:这是每个JPA供应商实现的接口, 用于获取符合条件的关系对象。
Spring Boot JPA

JPA类关系

我们上面讨论的类和接口保持一种关系。下图显示了类和接口之间的关系。

Spring Boot JPA
  • EntityManager和EntiyTransaction之间的关系是一对一的。每个EntityManager操作都有一个EntityTransaction实例。
  • EntityManageFactory和EntiyManager之间的关系是一对多的。它是EntityManager实例的工厂类。
  • EntityManager和Query之间的关系是一对多的。我们可以使用EntityManager类的实例来执行任意数量的查询。
  • EntityManager和Entity之间的关系是一对多的。 EntityManager实例可以管理多个实体。

JPA实施

JPA是一个开源API。有各种企业供应商, 例如Eclipse, RedHat, Oracle等, 通过在其中添加JPA来提供新产品。有一些流行的JPA实现框架, 例如Hibernate, EclipseLink, DataNucleus等。它也称为对象关系映射(ORM)工具。

对象关系映射(ORM)

在ORM中, Java对象到数据库表的映射(反之亦然)称为对象关系映射。 ORM映射充当关系数据库(表和记录)和Java应用程序(类和对象)之间的桥梁。

在下图中, ORM层是适配器层。它使对象图的语言适应SQL和关系表的语言。

Spring Boot JPA

ORM层存在于应用程序和数据库之间。它转换Java类和对象, 以便可以在关系数据库中存储和管理它们。默认情况下, 持久化的名称将成为表的名称, 而字段将成为列。建立应用程序后, 每个表行都对应一个对象。

JPA版本

EJB的早期版本使用javax.ejb.EntityBean接口定义了与业务逻辑层结合的持久层。 EJB规范包括JPA的定义。

在引入EJB 3.0时, 持久层被分离并指定为JPA 1.0(Java Persistence API)。使用JSR 220, 此API的规范与JAVA EE5的规范一起于2006年5月11日发布。

JPA在2019年更名为Jakarta Persistence。 JPA的最新版本是2.2。它支持以下功能:

  • Java 8, 数据和时间API
  • AttributeConvertes中的CDI注入
  • 它使注释@Repeatable

JPA和Hibernate之间的区别

JPA:JPA是一种Java规范, 用于访问, 管理和持久化Java对象与关系数据库之间的数据。这是ORM的标准方法。

Hibernate:这是一个轻量级的开源ORM工具, 用于将Java对象存储在关系数据库系统中。它是JPA的提供者。它遵循JPA提供的通用方法。

下表描述了JPA和Hibernate之间的区别。

JPA Hibernate
JPA是用于在Java应用程序中映射关系数据的Java规范。 Hibernate是一个ORM框架, 用于处理数据持久性。
JPA不提供任何实现类。 它提供了实现类。
它使用称为JPQL(Java持久性查询语言)的平台无关的查询语言。 它使用自己的称为HQL(休眠查询语言)的查询语言。
它在javax.persistence包中定义。 它在org.hibernate包中定义。
它在各种ORM工具(例如Hibernate, EclipseLink等)中实现。 Hibernate是JPA的提供者。
JPA使用EntityManager来处理数据的持久性。 在Hibernate中, 使用Session来处理数据的持久性。

Spring Boot Starter数据JPA

Spring Boot提供了启动器依赖项spring-boot-starter-data-jpa, 以有效地将Spring Boot应用程序与关系数据库连接。 spring-boot-starter-data-jpa在内部使用spring-boot-jpa依赖项。

<dependency>  
<groupId>org.springframework.boot</groupId>  
<artifactId>spring-boot-starter-data-jpa</artifactId>  
<version>2.2.2.RELEASE</version>  
</dependency>

Spring Boot JPA示例

让我们创建一个使用JPA连接到数据库的Spring Boot应用程序。在下面的示例中, 我们使用了内存数据库Apache Derby。

Apache Derby:这是一个完全用Java实现的开源嵌入式关系数据库。它在Apache License 2.0下可用。 Apache Derby具有以下优点:

  • 它易于安装, 部署和使用。
  • 它基于Java, JDBC和SQL标准。
  • 它提供了一个嵌入式JDBC驱动程序, 该驱动程序使我们可以将Derby嵌入任何基于Java的解决方案中。
  • 它还通过Derby Network Client JDBC驱动程序和Derby Network Server支持客户机/服务器模式。

Spring Boot可以自动配置嵌入式数据库, 例如H2, HSQL和Derbydatabase。我们不需要提供任何连接URL。我们只需要在要使用的嵌入式数据库上包括构建依赖项即可。

在Spring Boot中, 我们只需在pom.xml文件中添加Derby依赖关系, 就可以轻松集成Apache Derby数据库。

<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<scope>runtime</scope>
</dependency>

步骤1:打开Spring Initializr https://start.spring.io/。

步骤2:选择最新版本的Spring Boot 2.3.0(SNAPSHOT)

步骤3:提供群组名称。我们提供了com.srcmini。

步骤4:提供工件ID。我们提供了apache-derby-example。

步骤5:添加依赖项:Spring Web, Spring Data JPA和Apache Derby数据库。

步骤6:点击Generate(生成)按钮。当我们单击Generate按钮时, 它将项目封装在一个Jar文件中并将其下载到本地系统。

Spring Boot JPA

步骤7:解压缩Jar文件并将其粘贴到STS工作区中。

步骤8:将项目文件夹导入STS。

文件->导入->现有Maven项目->浏览->选择文件夹apache-derby-example->完成

导入需要一些时间。

步骤9:在src / main / java文件夹中创建一个名称为com.srcmini.model的包。

步骤10:在com.srcmini.model包中创建一个名称为UserRecord的类, 并执行以下操作:

  • 定义三个变量id, 名称和电子邮件。
  • 生成Getter和Setter。
    右键单击文件->源->生成Getter和Setters
  • 定义一个默认的构造函数。
  • 使用注释@Entity将类标记为Entity。
  • 通过使用注释@Id将ID标记为主键。

UserRecord.java

package com.srcmini.model;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity  
public class UserRecord 
{ 
@Id  
private int id;  
private String name;  
private String email;
//default conatructor  
public UserRecord()
{
}  
public int getId() 
{  
return id;  
}  
public void setId(int id) 
{  
this.id = id;  
}  
public String getName() 
{  
return name;  
}  
public void setName(String name) 
{  
this.name = name;  
}  
public String getEmail() 
{  
return email;  
}  
public void setEmail(String email) 
{
this.email = email;  
}  
}

步骤11:在src / main / java文件夹中创建一个名称为com.srcmini.controller的包。

步骤12:在com.srcmini.controller包中创建一个名称为UserController的Controller类, 并执行以下操作:

  • 使用注释@RestController将类标记为控制器。
  • 通过使用注释@Autowired自动装配类UserService。
  • 我们定义了两种映射, 一种用于获取所有用户, 另一种用于添加用户。

UserController.java

package com.srcmini.controller;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.web.bind.annotation.RequestBody;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.bind.annotation.RequestMethod;  
import org.springframework.web.bind.annotation.RestController;
import com.srcmini.model.UserRecord;
import com.srcmini.service.UserService;
import java.util.List;  
@RestController  
public class UserController 
{  
@Autowired  
private UserService userService;   
@RequestMapping("/")  
public List<UserRecord> getAllUser()
{  
return userService.getAllUsers();  
}     
@RequestMapping(value="/add-user", method=RequestMethod.POST)  
public void addUser(@RequestBody UserRecord userRecord)
{  
userService.addUser(userRecord);  
}     
}

步骤13:在src / main / java文件夹中创建一个名称为com.srcmini.service的软件包。

步骤14:在包com.srcmini.service中创建一个名称为UserController的Service类, 并执行以下操作:

  • 使用注释@Service将类标记为服务。
  • 自动连接UserRepository
  • 定义一个方法getAllUsers()返回一个列表
  • 定义另一个方法名称addUser()来保存用户记录。

UserService.java

package com.srcmini.service;  
import java.util.List;  
import java.util.ArrayList;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Service;
import com.srcmini.model.UserRecord;
import com.srcmini.repository.UserRepository;  
@Service  
public class UserService 
{  
@Autowired  
private UserRepository userRepository;  
public List<UserRecord> getAllUsers()
{  
List<UserRecord>userRecords = new ArrayList<>();  
userRepository.findAll().forEach(userRecords::add);  
return userRecords;  
}  
public void addUser(UserRecord userRecord)
{  
userRepository.save(userRecord);  
}  
}

步骤15:在src / main / java文件夹中创建一个名称为com.srcmini.repository的包。

步骤16:在包com.srcmini.repository中创建一个名称为UserRepository的存储库接口, 并扩展CrudRepository。

UserRepository.java

package com.srcmini.repository;  
import org.springframework.data.repository.CrudRepository;
import com.srcmini.model.UserRecord;  
public interface UserRepository extends CrudRepository<UserRecord, String> 
{  
}

步骤17:现在, 打开ApacheDerbyExampleApplication.java文件。它是在我们设置应用程序时默认创建的。

ApacheDerbyExampleApplication.java

package com.srcmini;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ApacheDerbyExampleApplication 
{
public static void main(String[] args) 
{
SpringApplication.run(ApacheDerbyExampleApplication.class, args);
}
}

现在, 我们已根据要求设置了所有必需的类和包。注意, 我们没有为数据库提供任何连接URL。完成上述所有步骤后, 项目目录如下所示:

Spring Boot JPA

让我们运行该应用程序。

步骤18:打开ApacheDerbyExampleApplication.java文件, 并将其作为Java应用程序运行。

步骤19:打开浏览器并调用URL http:// localhost:8080 /。它返回一个空列表, 因为我们没有在列表中添加任何用户。

要将用户添加到数据库, 我们将使用邮递员发送POST请求。

步骤20:打开邮递员, 然后执行以下操作:

  • 选择POST
  • 调用URL http:// localhost:8080 / add-user。
  • 点击身体
  • 选择Content-Type作为JSON(application / json)。
  • 将要插入的数据插入数据库中。我们插入了以下数据:
{
"id": "001", "name": "Tom", "email": "tom@gmail.com"
}
  • 单击发送按钮。
Spring Boot JPA

当我们单击发送按钮时, 它显示Status:200 OK。这意味着请求已成功执行。

步骤21:打开浏览器并调用URL http:// localhost:8080。它返回我们已经插入数据库中的用户。

Spring Boot JPA

下载Apache derby示例项目


赞(0) 打赏
未经允许不得转载:srcmini » Spring Boot JPA项目示例图解
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏