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

Spring Data JPA用法详解

本文概述

Spring Data是高级Spring Source项目。其目的是统一并轻松访问关系数据库系统和NoSQL数据存储等各种持久性存储。

当我们实现一个新的应用程序时, 我们应该专注于业务逻辑, 而不是技术复杂性和样板代码。这就是为什么Java Persistent API(JPA)规范和Spring Data JPA非常受欢迎的原因。

Spring Data JPA在JPA的顶部添加了一层。这意味着, Spring Data JPA使用JPA规范定义的所有功能, 尤其是实体, 关联映射和JPA的查询功能。 Spring Data JPA添加了自己的功能, 例如存储库模式的无代码实现以及根据方法名称创建数据库查询。

Spring Data JPA

Spring Data JPA处理大多数基于JDBC的数据库访问和ORM(对象关系映射)的复杂性。它减少了JPA所需的样板代码。它使你的持久层的实现更加轻松快捷。

Spring Data JPA旨在通过减少所需的工作量来改善数据访问层的实现。

Spring Data JPA功能

Spring Data JPA的三个主要功能如下:

  • 无代码存储库:这是最流行的与持久性相关的模式。它使我们能够在更高的抽象级别上实现业务代码。
  • 简化的样板代码:它通过其存储库接口为每种方法提供默认实现。这意味着不再需要实现读写操作。
  • 生成的查询:Spring Data JPA的另一个功能是根据方法名称生成数据库查询。如果查询不太复杂, 则需要在存储库接口上定义一个以findBy开头的名称的方法。定义方法后, Spring解析方法名称并为其创建查询。例如:
public interface EmployeeRepository extends CrudRepository<Employee, Long> 
{
Employee findByName(String name);
}

在上面的示例中, 我们扩展了使用两个泛型的CrudRepository:Employee和Long。 Employee是要管理的实体, Long是主键的数据类型

Spring在内部基于方法名称生成JPQL(Java持久性查询语言)查询。该查询是从方法签名派生的。它设置绑定参数值, 执行查询并返回结果。

其他一些功能如下:

  • 它可以集成自定义存储库代码。
  • 它是一个功能强大的存储库和自定义对象映射抽象。
  • 它支持透明审核。
  • 它实现了提供基本属性的域基类。
  • 它支持多个模块, 例如Spring Data JPA, Spring Data MongoDB, Spring Data REST, Spring Data Cassandra等。

Spring数据仓库

Spring Data JPA提供了三个存储库, 如下所示:

  • CrudRepository:提供标准的创建, 读取, 更新和删除功能, 其中包含诸如findOne(), findAll(), save(), delete()等方法。
  • PagingAndSortingRepository:它扩展了CrudRepository并添加了findAll方法。它使我们能够以分页方式对数据进行排序和检索。
  • JpaRepository:这是一个JPA特定的存储库, 它在Spring Data Jpa中定义。它扩展了存储库CrudRepository和PagingAndSortingRepository。它添加了特定于JPA的方法, 例如flush(), 以在持久性上下文上触发刷新。
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>

Spring Boot Starter数据JPA

Spring Boot提供spring-boot-starter-data-jpa依赖关系, 以有效地将Spring应用程序与关系数据库连接。 spring-boot-starter-data-jpa在内部使用spring-boot-jpa依赖项(自Spring Boot版本1.5.3起)。

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

数据库是用表/关系设计的。较早的方法(JDBC)涉及编写SQL查询。在JPA中, 我们会将对象中的数据存储到表中, 反之亦然。但是, JPA是通过不同的思维过程演变而来的。

在JPA之前, ORM是更常用于指代这些框架的术语。这就是Hibernate被称为ORM框架的原因。

JPA允许我们将应用程序类映射到数据库中的表。

  • 实体管理器:定义映射后, 它将处理与数据库的所有交互。
  • JPQL(Java持久性查询语言):它提供了一种编写查询以对实体执行搜索的方法。它不同于SQL查询。 JPQL查询已经了解实体之间定义的映射。如果需要, 我们可以添加其他条件。
  • 标准API:它定义了一个基于Java的API来对数据库执行搜索。

休眠与JPA

Hibernate是JPA的实现。它是最流行的ORM框架, 而JPA是定义规范的API。 Hibernate了解我们在对象和表之间添加的映射。它确保基于映射从数据库检索/存储数据。它还在JPA顶部提供了其他功能。

Spring Boot JPA示例

在此示例中, 我们将使用spring-boot-starter-data-jpa依赖关系来创建与H2数据库的连接。

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

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

第3步:提供工件ID。我们提供了spring-boot-jpa-example。

步骤4:添加依赖项:Spring Web, Spring Data JPA和H2数据库。

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

Spring Boot Starter Data JPA

步骤6:提取Jar文件并将其粘贴到STS工作区中。

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

文件->导入->现有Maven项目->浏览->选择文件夹spring-boot-jpa-example->完成

导入需要一些时间。

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

步骤9:在包com.srcmini.controller中创建一个名称为ControllerDemo的Controller类。

ControllerDemo.java

package com.srcmini.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ControllerDemo 
{
@RequestMapping("/")
public String home()
{
return "home.jsp";
}
}

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

步骤11:在com.srcmini.model包中创建一个名为User的类。

User.java

package com.srcmini.model;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="userdata")
public class User 
{
@Id
private int id;
private String username;
public int getId() 
{
return id;
}
public void setId(int id) 
{
this.id = id;
}
public String getUname() 
{
return username;
}
public void setUname(String username) 
{
this.username = username;
}
@Override
public String toString() 
{
return "User [id=" + id + ", uname=" + username + "]";
}
}

现在我们需要配置H2数据库。

步骤12:打开application.properties文件并配置以下内容:端口, 启用H2控制台, 数据源和URL。

application.properties

server.port=8085
spring.h2.console.enabled=true
spring.datasource.plateform=h2
spring.datasource.url=jdbc:h2:mem:srcmini

步骤13:在文件夹src / main / resources中创建一个SQL文件。

右键单击文件夹src / main / resources->新建->文件->提供文件名->完成

我们提供了文件名data.sql并将以下数据插入其中。

data.sql

insert into userdata values(101, 'Tom');
insert into userdata values(102, 'Andrew');
insert into userdata values(103, 'Tony');
insert into userdata values(104, 'Bob');
insert into userdata values(105, 'Sam');

步骤14:在src文件夹中创建一个名称为webapp的文件夹。

步骤15:使用我们在ControllerDemo中返回的名称创建一个JSP文件。在ControllerDemo.java中, 我们返回了home.jsp。

home.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="addUser">
ID :<br />
<input type="text" name="t1"><br />
User name :<br />
<input type="text" name="t2"><br />
<input type="submit" value="Add">
</form>
</body>
</html>

步骤16:运行SpringBootJpaExampleApplication.java文件。我们可以在控制台中看到我们的应用程序已在端口8085上成功运行。

Spring Boot Starter Data JPA

步骤17:打开浏览器并调用URL http:// localhost:8085 / h2-console /。它显示了驱动程序类, 我们在application.properties文件中配置的JDBC URL和默认的用户名sa。

Spring Boot Starter Data JPA

我们也可以通过单击”测试连接”按钮来测试连接。如果连接成功, 则显示消息”测试成功”。

步骤18:点击Connect(连接)按钮。它显示了我们在User.java中定义的表userdata的结构。

Spring Boot Starter Data JPA

步骤19:执行以下查询以查看我们已插入到data.sql文件中的数据。

SELECT * FROM USERDATA;
Spring Boot Starter Data JPA

下载专案


赞(0) 打赏
未经允许不得转载:srcmini » Spring Data JPA用法详解
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

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

微信扫一扫打赏