English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SpringBoot Data JPA

Spring Data is an advanced Spring Source project. Its purpose is to unify and easily access different types of persistence storage, such as relational database systems and NoSQL data stores.

When implementing a new application, we should focus on business logic rather than technical complexity and boilerplate code. This is why the Java Persistence API (JPA) specification and Spring Data JPA are very popular.

Spring Data JPA adds a layer on top of JPA. This means that Spring Data JPA uses all the features defined by the JPA specification, especially entities, association mappings, and JPA's query capabilities. Spring Data JPA adds its own features, such as the no-code implementation of repository patterns and the creation of database queries from method names.

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 y Long 。 Employee是要管理的 实体,而 Long 是主键的数据类型

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

还有其他一些功能,如下所示:

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

Spring数据存储库

Spring Data JPA proporciona 三个存储库,如下所示:

CrudRepository: : proporciona estándares创建,读取,更新y删除。它包含诸如 findOne(),findAll( ),save(),delete(),y otros. PagingAndSortingRepository : expandió CrudRepository y añadió el método findAll. Nos permite buscar de manera paginadaordenaryrecuperardatos. JpaRepository : Esto es un Repositorio específico de JPAen Spring Data Jpa definido. Extiende los repositorios CrudRepository y PagingAndSortingRepository. Añade métodos específicos de JPA, como flush()para activar el refresco en el contexto de persistencia.

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.2.3.RELEASE</version>
body>/dependency>

SpringBoot Starter Data JPA

Spring Boot proporciona spring-boot-starter-data-jpa relaciones dependencia para conectar eficazmente las aplicaciones Spring con bases de datos relacionales. spring-boot-starter-data-jpa utiliza internamente spring-boot-Dependencia jpa (desde la versión de Spring Boot1.5.3de inicio).

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

La base de datos se utiliza con tablas/Diseño de relaciones. Los métodos anteriores (JDBC) involucraban escribir consultas SQL. En JPA, guardaremos los datos de los objetos en las tablas y viceversa. Sin embargo, JPA ha evolucionado debido a un proceso de pensamiento diferente.

Antes de JPA, ORM era el término más comúnmente utilizado para referirse a estos marcos. Por eso Hibernate se conoce como framework ORM.

JPA nos permite mapear las clases de la aplicación a las tablas de la base de datos.

Gestor de entidades: : Después de definir el mapeo, manejará todas las interacciones con la base de datos. JPQL (Java Persistence Query Language): Proporciona un método para escribir consultas para buscar entidades. Diferente de las consultas SQL. Las consultas JPQL ya conocen los mapeos definidos entre entidades. Si es necesario, podemos agregar otras condiciones. API estándar : Define un API basado en Java para ejecutar búsquedas en la base de datos.

Hibernate y JPA

Hibernate es la implementación de JPA. Es el framework ORM más popular, mientras que JPA es el API que define los estándares. Hibernate conoce los mapeos que hemos agregado entre objetos y tablas. Asegura la recuperación basada en el mapeo desde la base de datos/almacenar datos. También ofrece otras funciones en la parte superior de JPA.

Ejemplo de Spring Boot JPA

En este ejemplo, utilizaremos spring-boot-starter-data- jpa依赖关系来创建与H2数据库的连接。

pasos1: 打开spring Initializr https://start.spring.io/。

pasos2: 提供 名称。我们提供了 com.w3codebox

pasos3: 提供 工件 ID。我们提供了 spring-boot-jpa-example。

pasos4: 添加依赖项: Spring Web,Spring Data JPA,y H2base de datos.

pasos5: haga clic en el botón para probar la conexión. Si la conexión es exitosa, se muestra el mensaje "Éxito de prueba". 生成按钮。当我们单击"生成"按钮时,它会将项目包装在 Jar 文件中,并将其下载到本地系统。

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

pasos7: 将项目文件夹导入STS。

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

导入需要一些时间。

pasos8: 创建一个名为 com.w3codebox.controller 的程序包在步骤 src/main/java 中。

pasos9: 在控制台中创建一个名称为 ControllerDemo 的Controller类。软件包 com.w3codebox.controller

ControllerDemo.java

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

pasos10: 在文件夹 src/main/java中创建另一个名为 com.w3codebox.model 的软件包。  

pasos11: 在包com.w3codebox.model中创建一个名称为   User 的类。

User. Java

package com.w3codebox.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 + "]";
}
}
 

Ahora, necesitamos configurar H2base de datos.

pasos12: Abre   . Muestra la clase del controlador, lo que hemos abre el archivo y configura el siguiente contenido:  puerto, activar H2consola, fuente de datos,y   URL.

. Muestra la clase del controlador, lo que hemos

server.port=8085
spring.h2.console.enabled=true
spring.datasource.platform=h2
spring.datasource.url=jdbc:h2:mem:w3codebox
 

pasos13: : En la carpeta   src/main/Crea uno en SQL archivo.

Haz clic derecho en la carpeta src/main/resources->Nuevo->Archivo->Proporcionar  Nombre del archivo->Terminado

Hemos proporcionado el nombre de archivo   data.sql y inserta los siguientes datos.

data.sql

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

pasos14: : En   src Crea un archivo llamado   webapp de

pasos15: usando el directorio   ControllerDemo En el archivo JSP devuelto, creamos un archivo JSP. En ControllerDemo.java, devolvemos   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>Insertar título aquí</title>
body>/head>

<body>
<form action="addUser"> /><br
Nombre de usuario:<br1<input type="text" name="t /><br
ID:<br /><br
Nombre de usuario:<br2<input type="text" name="t /><br
>
body>/<input type="submit" value="Agregar">
body>/form>
body>/<
 

pasos16: html>   ejecutar SpringBootJpaExampleApplication.java   8085 archivo. Podemos ver en la consola que nuestra aplicación se ejecuta en el puerto

pasos17: que se ejecuta con éxito. //Abra el navegador y llame a la URL http: 8085/localhost:2-h/console   . Muestra la clase del controlador, lo que hemos application.properties

la URL JDBC y el nombre de usuario predeterminado sa configurados en el archivo.   Podemos hacer clic en Probar Conexión

pasos18: haga clic en el botón para probar la conexión. Si la conexión es exitosa, se muestra el mensaje "Éxito de prueba".   Conectar (conexión) botón. Muestra lo que hemos   User.java definidas en la estructura de la tabla userdata.

pasos19: Ejecute las siguientes consultas para ver las tablas   data.sql datos en el archivo.

SELECT * FROM USERDATA;