0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用JPA访问数据的过程

「Spring」认证安全架构 来源:Spring」认证安全架构 作者:Spring」认证安全架 2022-09-06 15:48 次阅读

本指南将引导您完成构建应用程序的过程,该应用程序使用#spring# #spring认证# Spring Data JPA 在关系数据库中存储和检索数据。

你将建造什么

您将构建一个将CustomerPOJO(普通旧 Java 对象)存储在基于内存的数据库中的应用程序。

你需要什么

  • 约15分钟
  • 最喜欢的文本编辑器或 IDE
  • JDK 1.8或更高版本
  • Gradle 4+或Maven 3.2+
  • 您还可以将代码直接导入 IDE:
    • 弹簧工具套件 (STS)
    • IntelliJ IDEA

如何完成本指南

像大多数 Spring入门指南一样,您可以从头开始并完成每个步骤,也可以绕过您已经熟悉的基本设置步骤。无论哪种方式,您最终都会得到工作代码。

从头开始,请继续从 Spring Initializr 开始。

跳过基础知识,请执行以下操作:

  • 下载并解压缩本指南的源存储库,或使用Git克隆它:git clone https://github.com/spring-guides/gs-accessing-data-jpa.git
  • 光盘进入gs-accessing-data-jpa/initial
  • 跳转到定义一个简单实体。

完成后,您可以对照中的代码检查结果
gs-accessing-data-jpa/complete

从 Spring Initializr 开始

您可以使用这个预先初始化的项目并单击 Generate 下载 ZIP 文件。此项目配置为适合本教程中的示例。

手动初始化项目:

  1. 导航到https://start.spring.io。该服务提取应用程序所需的所有依赖项,并为您完成大部分设置。
  2. 选择 Gradle 或 Maven 以及您要使用的语言。本指南假定您选择了 Java。
  3. 单击Dependencies并选择Spring Data JPA,然后选择H2 Database
  4. 单击生成
  5. 下载生成的 ZIP 文件,该文件是根据您的选择配置的 Web 应用程序的存档。

如果您的 IDE 具有 Spring Initializr 集成,您可以从您的 IDE 完成此过程。

你也可以从 Github 上 fork 项目并在你的 IDE 或其他编辑器中打开它。

定义一个简单的实体

在此示例中,您存储Customer对象,每个对象都被注释为 JPA 实体。以下清单显示了 Customer 类(在 中
src/main/java/com/example/accessingdatajpa/Customer.java):

package com.example.accessingdatajpa;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Customer {

  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  private Long id;
  private String firstName;
  private String lastName;

  protected Customer() {}

  public Customer(String firstName, String lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }

  @Override
  public String toString() {
    return String.format(
        "Customer[id=%d, firstName='%s', lastName='%s']",
        id, firstName, lastName);
  }

  public Long getId() {
    return id;
  }

  public String getFirstName() {
    return firstName;
  }

  public String getLastName() {
    return lastName;
  }
}复制

这里有一个Customer具有三个属性的类:idfirstNamelastName。您还有两个构造函数。默认构造函数的存在只是为了 JPA。您不直接使用它,因此将其指定为protected。另一个构造函数是您用来创建Customer要保存到数据库的实例的构造函数。

该类Customer用 注释@Entity,表示它是一个 JPA 实体。(由于不@Table存在注解,假设该实体映射到名为 的表Customer。)

Customer对象的属性id带有注释,@Id以便 JPA 将其识别为对象的 ID。该id属性还带有注释@GeneratedValue以指示应自动生成 ID。

其他两个属性firstNamelastName未注释。假设它们被映射到与属性本身共享相同名称的列。

方便的toString()方法打印出客户的属性。

创建简单查询

Spring Data JPA 专注于使用 JPA 将数据存储在关系数据库中。它最引人注目的功能是能够在运行时从存储库接口自动创建存储库实现。

要了解它是如何工作的,请创建一个与Customer实体一起使用的存储库接口,如以下清单(in
src/main/java/com/example/accessingdatajpa/CustomerRepository.java)所示:

package com.example.accessingdatajpa;

import java.util.List;

import org.springframework.data.repository.CrudRepository;

public interface CustomerRepository extends CrudRepository {

  List findByLastName(String lastName);

  Customer findById(long id);
}复制,>

CustomerRepository扩展CrudRepository接口。它使用的实体类型和 IDCustomer以及Long,在通用参数中指定CrudRepository。通过扩展CrudRepositoryCustomerRepository继承了几种处理Customer持久性的方法,包括保存、删除和查找Customer实体的方法。

Spring Data JPA 还允许您通过声明方法签名来定义其他查询方法。例如,CustomerRepository包括findByLastName()方法。

在典型的 Java 应用程序中,您可能希望编写一个实现CustomerRepository. 然而,这正是 Spring Data JPA 如此强大的原因:您无需编写存储库接口的实现。Spring Data JPA 在您运行应用程序时创建一个实现。

现在你可以连接这个例子,看看它是什么样子的!

创建应用程序类

Spring Initializr 为应用程序创建一个简单的类。以下清单显示了 Initializr 为本示例创建的类(在 中
src/main/java/com/example/accessingdatajpa/AccessingDataJpaApplication.java):

package com.example.accessingdatajpa;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class AccessingDataJpaApplication {

  public static void main(String[] args) {
    SpringApplication.run(AccessingDataJpaApplication.class, args);
  }

}复制

@SpringBootApplication是一个方便的注释,它添加了以下所有内容:

  • @Configuration: 将类标记为应用程序上下文的 bean 定义源。
  • @EnableAutoConfiguration:告诉 Spring Boot 根据类路径设置、其他 bean 和各种属性设置开始添加 bean。例如,如果spring-webmvc位于类路径上,则此注释将应用程序标记为 Web 应用程序并激活关键行为,例如设置DispatcherServlet.
  • @ComponentScan: 告诉 Spring 在包中查找其他组件、配置和服务com/example,让它找到控制器

main()方法使用 Spring Boot 的SpringApplication.run()方法来启动应用程序。您是否注意到没有一行 XML?也没有web.xml文件。这个 Web 应用程序是 100% 纯 Java,您不必处理任何管道或基础设施的配置。

现在您需要修改 Initializr 为您创建的简单类。要获得输出(在本例中为控制台),您需要设置一个记录器。然后您需要设置一些数据并使用它来生成输出。以下清单显示了完成的
AccessingDataJpaApplication类(在 中
src/main/java/com/example/accessingdatajpa/AccessingDataJpaApplication.java):

package com.example.accessingdatajpa;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class AccessingDataJpaApplication {

  private static final Logger log = LoggerFactory.getLogger(AccessingDataJpaApplication.class);

  public static void main(String[] args) {
    SpringApplication.run(AccessingDataJpaApplication.class);
  }

  @Bean
  public CommandLineRunner demo(CustomerRepository repository) {
    return (args) -> {
      // save a few customers
      repository.save(new Customer("Jack", "Bauer"));
      repository.save(new Customer("Chloe", "O'Brian"));
      repository.save(new Customer("Kim", "Bauer"));
      repository.save(new Customer("David", "Palmer"));
      repository.save(new Customer("Michelle", "Dessler"));

      // fetch all customers
      log.info("Customers found with findAll():");
      log.info("-------------------------------");
      for (Customer customer : repository.findAll()) {
        log.info(customer.toString());
      }
      log.info("");

      // fetch an individual customer by ID
      Customer customer = repository.findById(1L);
      log.info("Customer found with findById(1L):");
      log.info("--------------------------------");
      log.info(customer.toString());
      log.info("");

      // fetch customers by last name
      log.info("Customer found with findByLastName('Bauer'):");
      log.info("--------------------------------------------");
      repository.findByLastName("Bauer").forEach(bauer -> {
        log.info(bauer.toString());
      });
      // for (Customer bauer : repository.findByLastName("Bauer")) {
      //  log.info(bauer.toString());
      // }
      log.info("");
    };
  }

}复制

该类
AccessingDataJpaApplication包括一个通过一些测试的demo()方法。CustomerRepository首先,它CustomerRepository从 Spring 应用程序上下文中获取 。然后它会保存一些Customer对象,演示该save()方法并设置一些要使用的数据。接下来,它调用从数据库findAll()中获取所有Customer对象。然后它调用以通过其 IDfindById()获取单个。Customer最后,它调用findByLastName()查找所有姓氏为“Bauer”的客户。该demo()方法返回一个CommandLineRunner在应用程序启动时自动运行代码的 bean。

默认情况下,Spring Boot 启用 JPA 存储库支持并查找所在的包(及其子包)@SpringBootApplication。如果您的配置具有位于不可见包中的 JPA 存储库接口定义,则可以通过使用@EnableJpaRepositories及其类型安全basePackageClasses=MyRepository.class参数指出备用包。

构建一个可执行的 JAR

您可以使用 Gradle 或 Maven 从命令行运行应用程序。您还可以构建一个包含所有必要依赖项、类和资源的单个可执行 JAR 文件并运行它。构建可执行 jar 可以在整个开发生命周期、跨不同环境等中轻松地作为应用程序交付、版本化和部署服务。

如果您使用 Gradle,则可以使用./gradlew bootRun. 或者,您可以使用构建 JAR 文件./gradlew build,然后运行 ​JAR 文件,如下所示:

java -jar build/libs/gs-accessing-data-jpa-0.1.0.jar

如果您使用 Maven,则可以使用./mvnw spring-boot:run. 或者,您可以使用构建 JAR 文件,./mvnw clean package然后运行该 JAR 文件,如下所示:

java -jar 目标/gs-accessing-data-jpa-0.1.0.jar

此处描述的步骤创建了一个可运行的 JAR。您还可以构建经典的 WAR 文件。

运行应用程序时,您应该会看到类似于以下内容的输出:

== 使用 findAll() 找到的客户:
客户[id=1, firstName='Jack', lastName='Bauer']
客户[id=2, firstName='Chloe', lastName='O'Brian']
客户[id=3, firstName='Kim', lastName='Bauer']
客户[id=4, firstName='David', lastName='Palmer']
客户[id=5, firstName='Michelle', lastName='Dessler']

== 使用 findById(1L) 找到客户:
客户[id=1, firstName='Jack', lastName='Bauer']

== 使用 findByLastName('Bauer') 找到客户:
客户[id=1, firstName='Jack', lastName='Bauer']
客户[id=3, firstName='Kim', lastName='Bauer']

概括

恭喜!您已经编写了一个简单的应用程序,该应用程序使用 Spring Data JPA 将对象保存到数据库并从数据库中获取它们,而无需编写具体的存储库实现。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3750

    浏览量

    64206
  • 程序
    +关注

    关注

    115

    文章

    3753

    浏览量

    80709
  • spring
    +关注

    关注

    0

    文章

    336

    浏览量

    14283
收藏 人收藏

    评论

    相关推荐

    JPA实体类中的注解介绍

    今天给大家介绍一下 JPA 实体类中的注解,希望能对大家有帮助。 基本注解 @Entity 标注于实体类声明语句之前,指出该 Java 类为实体类,将映射到指定的数据库表。 name(可选):实体
    的头像 发表于 09-25 14:42 636次阅读

    labvies访问数据

    LabVIEW 中利用LabSQL 访问数据库 虚拟仪器VI(virtual instruments)是National Instruments 公司在其产品LabVIEW 中首先提出的创新
    发表于 08-26 10:19

    远程访问数据库时发生这样的现象

    在同一局外一台电脑上也通过labview程序进行访问,并且通过程序对数据库文件进行操作,碰到了以上问题,问题在文档里面,是两张图片,多指教。特别说明:数据库文件已经共享,并且其只读和隐
    发表于 10-12 11:41

    JPA分页查询的常用方法

    JPA分页查询与条件分页查询
    发表于 10-23 17:10

    使用jpa和thymeleaf做增删改查示例

    【本人秃顶程序员】springboot专辑:springboot+jpa+thymeleaf增删改查示例
    发表于 04-01 11:49

    springboot spring data jpa使用总结

    【本人秃顶程序员】springboot专辑:spring data jpa的使用
    发表于 04-15 11:38

    三种访问过程映像的方法

    硬实时的需求。用户可以通过python等高级语言编写程序,并且可以通过存储器中的过程映像便捷的写入或者读取所有当前过程值。本文将介绍从过程映像中访问
    发表于 02-02 16:40

    DataAbility的使用方法及访问数据库的过程

    DataAbility介绍:使用Data模板的Ability(以下简称“Data”)有助于应用管理其自身和其他应用存储数据访问,并提供与其他应用共享数据的方法。Data既可用于同设备不同应用的
    发表于 04-06 10:32

    Oracle数据库网络安全访问机制

    本文主要分析了Oracle 客户端通过Net8 访问数据库服务器过程,阐述了Oracle 数据库的网络访问机制以及Net8 在实现Oracl
    发表于 08-29 10:20 20次下载

    基于OPC的数据访问服务器开发

    基于OPC的数据访问服务器开发一文以针对一种PCI总线CAN通信卡设计的 OPC 数据访问服务器为编程实例,详细介绍了OPC数据
    发表于 07-18 16:39 35次下载
    基于OPC的<b class='flag-5'>数据</b><b class='flag-5'>访问</b>服务器开发

    基于XACML访问控制系统设计

    在云计算中用户访问云计算平台的过程实际上就是主体(云用户)访问客体(云计算平台)的过程。而所有用户的数据信息均存储在云计算平台中,也就是云计
    发表于 11-09 15:05 4次下载
    基于XACML<b class='flag-5'>访问</b>控制系统设计

    一文详谈Spring JPA

    大家好,今天我和大家聊一下关于Spring JPA 的相关知识,我们先来了解下什么是 JPA
    的头像 发表于 06-30 17:29 2179次阅读

    Delphi数据访问组件方案

    适用于任何数据库的更快、更可靠的数据连接解决方案 Delphi 数据访问组件 Delphi数据访问
    的头像 发表于 06-26 10:02 752次阅读
    Delphi<b class='flag-5'>数据</b><b class='flag-5'>访问</b>组件方案

    JPA基础概念

    相信大部分java小伙伴在日常开发过程中,在存储操作层都会选择更容易上手的jpa,各种封装,通过注解等方式,简化了大量的代码内容,同时提升了开发效率,但是(敲黑板,永远都躲不开的但是...)相应也将
    的头像 发表于 10-08 14:36 652次阅读
    <b class='flag-5'>JPA</b>基础概念

    CDN工作原理和访问过程

    ,源站域名,然后进入到自己域名的DNS配置信息,将 A 记录修改成 CNAME 记录即可。 CDN访问过程 image.png 1、用户访问图片内容,先经过 本地DNS 解析,如果 LDNS 命中
    的头像 发表于 10-09 15:41 1353次阅读
    CDN工作原理和<b class='flag-5'>访问过程</b>