Spring Boot JPA 是用于管理Java应用程序中的关系数据的Java规范。它使无涯教程能够在Java对象/类与关系数据库之间访问和持久化数据。 JPA遵循对象关系映射。它是一组接口。它还提供了运行时 EntityManager API,用于处理针对数据库对象的查询和事务。它使用与平台无关的面向对象的查询语言JPQL(Java持久查询语言)。
在持久性方面,它涵盖三个领域:
JPA不是框架。它定义了可以由任何框架实现的概念。
与JDBC,SQL和手写映射相比,JPA更简单。 JPA适用于非性能导向的复杂应用程序。与JDBC相比,JPA的主要优点在于,在JPA中,数据由对象和类表示,而在JDBC中,数据由表和记录表示。它使用POJO表示持久化数据,从而简化了数据库编程。 JPA还有其他优点:
JPA是将业务实体存储为关系实体的来源。它显示了如何将POJO定义为实体以及如何通过关系管理实体。
下图描述了JPA的类级别的体系结构,该体系结构描述了在 javax persistence 包中定义的JPA的核心类和接口。 JPA体系结构包含以下单元:
无涯教程上面讨论的类和接口保持一种关系。下图显示了类和接口之间的关系。
JPA是一个开源API。有各种各样的企业供应商,例如Eclipse,RedHat,Oracle等,通过在其中添加JPA来提供新产品。有一些流行的JPA实现框架,例如 Hibernate,EclipseLink,DataNucleus 等。它也称为 Object-Relation Mapping (ORM)工具。
在ORM中,Java对象到数据库表的映射,反之亦然,称为 Object-Relational Mapping。ORM映射充当关系数据库(表)之间的桥梁。
在下图中,ORM层是适配器层。它使对象图的语言适应SQL和关系表的语言。
ORM层存在于应用程序和数据库之间。它转换Java类和对象,以便可以在关系数据库中存储和管理它们。默认情况下,持久化的名称将成为表的名称,而字段将成为列。建立应用程序后,每个表行都对应一个对象。
EJB的早期版本使用 javax.ejb.EntityBean 接口定义了与业务逻辑层结合的持久层。 EJB规范包括JPA的定义。
在引入EJB 3.0时,持久层被分离并指定为JPA 1.0(Java Persistence API)。使用JSR 220,此API的规范与JAVA EE5的规范一起于2006年5月11日发布。
在2019年,JPA重命名为 Jakarta Persistence 。 JPA的最新版本是 2.2 。它支持以下函数:
JPA - JPA是一种Java规范,用于访问,管理和持久化Java对象与关系数据库之间的数据。这是ORM的标准方法。
Hibernate - 这是一个轻量级的开源ORM工具,用于在关系数据库系统中存储Java对象。它是JPA的提供者。它遵循JPA提供的通用方法。
下表描述了JPA和Hibernate之间的区别。
JPA | Hibernate |
---|---|
JPA是 Java规范,用于在Java应用程序中映射关系数据。 | Hibernate是一个用于处理数据持久性的 ORM框架。 |
JPA不提供任何实现类。 | 它提供了实现类。 |
它使用称为 JPQL (Java持久性查询语言)的平台无关的查询语言。 | 它使用自己的称为 HQL 的查询语言(Hibernate查询语言)。 |
它在 javax.persistence 包中定义。 | 它在 org.hibernate 包中定义。 |
它在各种ORM工具(如 Hibernate,EclipseLink等等)中实现。 | Hibernate是JPA的提供者。 |
JPA使用 EntityManager 处理d的持久性 | 在Hibernate中,使用 Session 处理数据的持久性。 |
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>
让无涯教程创建一个使用JPA连接到数据库的Spring Boot应用程序。在以下示例中,使用了内存数据库 Apache Derby 。
Apache Derby::它是完全用Java实现的开源,嵌入式关系数据库。它在Apache License 2.0下可用。 Apache Derby具有以下优点:
Spring Boot可以自动配置嵌入式数据库,例如 H2,HSQL,和 Derbydatabases 。无涯教程不需要提供任何连接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 - 填写Group名称。
步骤4 - 填写Artifact ID。
步骤5 - 添加依赖项: Spring Web,Spring Data JPA 和 Apache Derby数据库。
步骤6 - 单击 Generate (生成)按钮。当无涯教程单击Generate按钮时,它将项目封装在一个Jar文件中,并将其下载到本地系统。
步骤7 - 提取(Extract),然后将其粘贴到STS工作区中。
步骤8 - 将项目文件夹导入STS。
File -> Import -> Existing Maven Projects -> Browse -> Select the folder apache-derby-example -> Finish
步骤9 - 在文件夹 src/main/java中创建一个名称为 com.learnfk.model 的软件包。
步骤10 - 在包 com.learnfk.model 中创建一个名称为 UserRecord 的类,然后执行以下操作:
UserRecord.java
package com.learnfk.model; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class UserRecord { @Id private int id; private String name; private String email; 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.learnfk.controller 的软件包。
步骤12 - 在包 com.learnfk.controller 中创建一个名称为 UserController 的Controller类,并执行以下操作:
UserController.java
package com.learnfk.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.learnfk.model.UserRecord; import com.learnfk.service.UserService; import java.util.List; @RestController public class UserController { @Autowired private UserService userService; @RequestMapping("/") public ListgetAllUser() { return userService.getAllUsers(); } @RequestMapping(value="/add-user", method=RequestMethod.POST) public void addUser(@RequestBody UserRecord userRecord) { userService.addUser(userRecord); } }
步骤13 - 在 src/main/java文件夹中创建一个名称为 com.learnfk.service 的软件包。
步骤14 - 在包 com.learnfk.service 中创建一个名称为 UserController 的Service类,并执行以下操作:
UserService.java
package com.learnfk.service; import java.util.List; import java.util.ArrayList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.learnfk.model.UserRecord; import com.learnfk.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.learnfk.repository 的软件包。
步骤16 - 在包 com.learnfk.repository 中创建名称为 UserRepository 的存储库接口,并扩展 CrudRepository 。
UserRepository.java
package com.learnfk.repository; import org.springframework.data.repository.CrudRepository; import com.learnfk.model.UserRecord; public interface UserRepository extends CrudRepository{ }
步骤17 - 现在,打开 ApacheDerbyExampleApplication.java 文件。它是在无涯教程设置应用程序时默认创建的。
ApacheDerbyExampleApplication.java
package com.learnfk; 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 。完成上述所有步骤后,项目目录如下所示:
让无涯教程运行该应用程序。
步骤18 - 打开ApacheDerbyExampleApplication.java文件,并将其作为Java应用程序运行。
步骤19 - 打开浏览器并调用URL http://localhost:8080/。它返回一个空列表,因为没有在列表中添加任何用户。
要将用户添加到数据库中,将使用 Postman 发送 POST 请求。
步骤20 - 打开Postman,然后执行以下操作:
{ "id": "001", "name": "Tom", "email": "tom@gmail.com" }
当无涯教程单击"Send"按钮时,它显示状态:200 OK 。这意味着请求已成功执行。
步骤21 - 打开浏览器并调用URL http:// localhost:8080。它返回已经插入数据库中的用户。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)
Tony Bai · Go语言第一课 -〔Tony Bai〕