0Pricing
Spring Boot 4 Microservices & REST APIs · 课时

创建实体与存储库

定义用于表示数据模型的 JPA 实体,并使用 Spring Data 存储库访问数据。

创建实体与存储库 是 CoddyKit 上的免费 Spring Boot 4 Microservices & REST APIs 课时。 这是第 3 节课,共 6 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Spring Boot 4 Microservices & REST APIs 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Spring Boot 4 Microservices & REST APIs 课程共包含 6 节课。

本课时的部分内容尚未翻译,以英文显示。

What are JPA Entities?

Welcome to creating your data model! In Spring Boot with JPA, an Entity is a plain Java object that represents a table in your database.

Think of it as a blueprint for the rows in your table. Each instance of an entity class corresponds to a single row in the database table.

Marking a Class as an Entity

To tell Spring Boot that a Java class is an entity, we use the @Entity annotation. This annotation comes from the Java Persistence API (JPA).

When Spring sees @Entity, it knows to map this class to a database table. By default, the table name will be the same as the class name (e.g., a Product class maps to a Product table).

Defining Primary Keys with @Id

Every database table needs a primary key to uniquely identify each record. In JPA, we mark a field as the primary key using the @Id annotation.

Often, we want the database to automatically generate this ID for us. For this, we use the @GeneratedValue annotation, typically with a strategy like IDENTITY for auto-incrementing numbers.

Our First Product Entity

Let's create a simple Product entity. It will have an ID, a name, and a price. Notice the annotations @Entity, @Id, and @GeneratedValue.

Remember to include a default constructor and getters/setters for JPA to work correctly.

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

@Entity
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private double price;

    public Product() {}

    public Product(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public double getPrice() { return price; }
    public void setPrice(double price) { this.price = price; }

    @Override
    public String toString() {
        return "Product{" +
               "id=" + id +
               ", name='" + name + '\'' +
               ", price=" + price +
               '}';
    }
}

Introducing Spring Data Repositories

Now that we have an entity, how do we interact with the database to save, retrieve, update, or delete products? This is where Repositories come in!

Spring Data JPA provides a powerful abstraction that simplifies data access. Instead of writing complex SQL queries, you define simple interfaces.

The JpaRepository Interface

The core of Spring Data JPA is the JpaRepository interface. When your repository interface extends JpaRepository, Spring automatically provides standard CRUD (Create, Read, Update, Delete) methods for your entity.

You just need to specify the entity type and the type of its primary key, like this: JpaRepository<YourEntity, ID_Type>.

Defining Our Product Repository

Let's create a repository for our Product entity. It's just an interface that extends JpaRepository, telling Spring to generate the necessary code for us.

We specify Product as the entity type and Long as the primary key type.

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
    // Spring Data JPA automatically provides methods like:
    // save(), findById(), findAll(), deleteById(), etc.
}

Using Repositories in Spring

In a Spring Boot application, you would typically inject your repository into a service or controller using @Autowired. Then, you can call the built-in methods.

  • repository.save(product): Saves a new product or updates an existing one.
  • repository.findById(id): Finds a product by its ID.
  • repository.findAll(): Retrieves all products.

Entity & Repository in Action

Here's a conceptual example showing how an entity is created and how a repository would save it. We're simulating the repository behavior to make it runnable without a full Spring Boot setup.

This demonstrates creating a Product object and using a 'save' method.

// --- Simulated Product Entity --- //
class Product {
    private Long id;
    private String name;
    private double price;

    public Product(Long id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }
    // Getters and Setters (simplified for brevity)
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public double getPrice() { return price; }
    public void setPrice(double price) { this.price = price; }

    @Override
    public String toString() {
        return "Product{id=" + id + ", name='" + name + "', price=" + price + "}";
    }
}

// --- Simulated Product Repository Interface --- //
interface ProductRepository {
    Product save(Product product);
}

// --- Simulated Product Repository Implementation --- //
class SimpleProductRepository implements ProductRepository {
    private static Long nextId = 1L;
    @Override
    public Product save(Product product) {
        if (product.getId() == null) {
            product.setId(nextId++); // Assign a new ID
        }
        System.out.println("Simulating save: " + product);
        return product;
    }
}

public class Main {
    public static void main(String[] args) {
        // 1. Create a Product entity instance
        Product newProduct = new Product(null, "Wireless Earbuds", 99.99);
        System.out.println("Created product: " + newProduct);

        // 2. Simulate saving it using our repository
        ProductRepository repository = new SimpleProductRepository();
        Product savedProduct = repository.save(newProduct);

        System.out.println("Product after simulated save: " + savedProduct);
    }
}

Quick Check: Core Concepts

Which of the following annotations is used to mark a class as a JPA entity that maps to a database table?

Recap: Entities & Repositories

You've learned the fundamentals of defining your data model with Spring Data JPA!

  • Entities are Java objects representing database tables, marked with @Entity.
  • Primary keys are defined with @Id and often auto-generated using @GeneratedValue.
  • Repositories are interfaces that extend JpaRepository, providing powerful, ready-to-use methods for interacting with your database.

These two concepts are the cornerstone of data persistence in Spring Boot.

常见问题解答

「创建实体与存储库」课时是免费的吗?

是的 — 「创建实体与存储库」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Spring Boot 4 Microservices & REST APIs 课程的其余内容,请升级到 CoddyKit PRO。 Spring Boot 4 Microservices & REST APIs 课程共包含 6 节课。

「创建实体与存储库」这节课中我会学到什么?

定义用于表示数据模型的 JPA 实体,并使用 Spring Data 存储库访问数据。 你通过在浏览器中直接运行的动手代码来练习 Spring Boot 4 Microservices & REST APIs,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Spring Boot 4 Microservices & REST APIs 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Spring Boot 4 Microservices & REST APIs 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 6 节。

「创建实体与存储库」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Spring Boot 4 Microservices & REST APIs 课中编写并运行代码吗?

能。每节 Spring Boot 4 Microservices & REST APIs 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 集成 H2 数据库与 JPA
  2. Spring Data JPA 简介
  3. 创建实体与存储库
  4. 定义实体与存储库
  5. 使用 REST 执行 CRUD 操作
  6. 执行增删改查操作
← 返回 Spring Boot 4 Microservices & REST APIs