Spring JPA Demo初步

2023年 3月 5日 26点热度 0人点赞

这个例子是摘自官方的:https://spring.io/guides/gs/accessing-data-jpa/

定义实体

package com.example.accessingdatajpa;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.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 类:id、firstName 和 lastName。您还有两个构造函数。默认构造函数的存在只是为了 JPA。您不直接使用它,因此它被指定为受保护的。另一个构造函数是用于创建要保存到数据库的 Customer 实例的构造函数。

Customer 类用@Entity 进行注解,表明它是一个JPA 实体。(因为不存在 @Table 注解,所以假定此实体映射到名为 Customer 的表。)

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

其他两个属性 firstName 和 lastName 没有注释。假设它们被映射到与属性本身同名的列。

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

创建简单查询

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

要查看其工作原理,请创建一个与 Customer 实体一起使用的存储库接口,如以下清单(在 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<Customer, Long> {

  List<Customer> findByLastName(String lastName);

  Customer findById(long id);
}

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

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

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

 

rainbow

这个人很懒,什么都没留下

文章评论