本文概述
- Spring Data JPA
- Spring数据仓库
- Spring Boot Starter数据JPA
当我们实现一个新的应用程序时, 我们应该专注于业务逻辑, 而不是技术复杂性和样板代码。这就是为什么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等。
- 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来对数据库执行搜索。
Hibernate是JPA的实现。它是最流行的ORM框架, 而JPA是定义规范的API。 Hibernate了解我们在对象和表之间添加的映射。它确保基于映射从数据库检索/存储数据。它还在JPA顶部提供了其他功能。
Spring Boot JPA示例
在此示例中, 我们将使用spring-boot-starter-data-jpa依赖关系来创建与H2数据库的连接。
【Spring Data JPA用法详解】步骤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文件中并将其下载到本地系统。
文章图片
步骤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;
@Controllerpublic 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 {@Idprivate 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;
}@Overridepublic String toString() {return "User [id=" + id + ", uname=" + username + "]";
}}
现在我们需要配置H2数据库。
步骤12:打开application.properties文件并配置以下内容:端口, 启用H2控制台, 数据源和URL。
application.properties
server.port=8085spring.h2.console.enabled=truespring.datasource.plateform=h2spring.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="http://www.srcmini.com/Add">
<
/form>
<
/body>
<
/html>
步骤16:运行SpringBootJpaExampleApplication.java文件。我们可以在控制台中看到我们的应用程序已在端口8085上成功运行。
文章图片
步骤17:打开浏览器并调用URL http:// localhost:8085 / h2-console /。它显示了驱动程序类, 我们在application.properties文件中配置的JDBC URL和默认的用户名sa。
文章图片
我们也可以通过单击” 测试连接” 按钮来测试连接。如果连接成功, 则显示消息” 测试成功” 。
步骤18:点击Connect(连接)按钮。它显示了我们在User.java中定义的表userdata的结构。
文章图片
步骤19:执行以下查询以查看我们已插入到data.sql文件中的数据。
SELECT * FROM USERDATA;
文章图片
下载专案
推荐阅读
- Spring Boot Starter测试示例
- Spring Boot Starter Web用法详解
- Spring Boot使用Tomcat进行项目部署(图文)
- Spring Boot Starter父级用法介绍
- Spring Boot多模块项目实例详细图解
- android 使用SQLite存储数据
- 关于常用的web.xmlapplicationContext.xml与springMVC-servlet.xml
- Android五种数据存储方式
- 猫眼电影App抓包获取评论数据接口