Spring Boot 4 Microservices & REST APIs · บทเรียน

การกำหนดเอนทิตีและคลังข้อมูล

สร้างเอนทิตี JPA เพื่อแมปกับตารางฐานข้อมูล และกำหนดอินเทอร์เฟซคลังข้อมูลสำหรับการเข้าถึงข้อมูล

บทเรียน 4 จาก 611 ขั้นตอน

การกำหนดเอนทิตีและคลังข้อมูล เป็นบทเรียน Spring Boot 4 Microservices & REST APIs ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 6 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Spring Boot 4 Microservices & REST APIs และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Spring Boot 4 Microservices & REST APIs มีบทเรียนทั้งหมด 6 บทเรียน

ยินดีต้อนรับสู่การคงอยู่ของข้อมูล

ในบทเรียนนี้ เราจะเรียนรู้วิธีเชื่อมต่อแอปพลิเคชัน Java ของคุณกับฐานข้อมูลโดยใช้ Spring Boot สิ่งนี้เรียกว่า การคงอยู่ของข้อมูล ซึ่งหมายความว่าข้อมูลของคุณยังคงอยู่แม้แอปจะหยุดทำงานแล้ว

เราจะมุ่งเน้นแนวคิดหลักสองประการ:

  • เอนทิตี: วัตถุ Java ของคุณที่แมปกับตารางฐานข้อมูล
  • แหล่งเก็บข้อมูล: อินเทอร์เฟซที่มอบวิธีง่าย ๆ ในการโต้ตอบกับเอนทิตีและฐานข้อมูล

JPA Entity คืออะไร

JPA Entity คือคลาส Java ทั่วไปที่แสดงถึงตารางในฐานข้อมูลเชิงสัมพันธ์ของคุณ อินสแตนซ์แต่ละรายการของคลาสนี้จะสอดคล้องกับแถวหนึ่งแถวในตารางนั้น

Java Persistence API (JPA) คือมาตรฐานสำหรับจัดการข้อมูลเชิงสัมพันธ์ในแอปพลิเคชัน Java ส่วน Spring Data JPA ต่อยอดจากมาตรฐานนี้เพื่อทำให้การโต้ตอบกับฐานข้อมูลง่ายยิ่งขึ้น

กำหนดเอนทิตีแรกของคุณ

หากต้องการกำหนดให้คลาส Java เป็น JPA Entity ให้ใช้คำอธิบายประกอบ @Entity นอกจากนี้คุณต้องกำหนด คีย์หลัก โดยใช้ @Id

มาสร้างเอนทิตี Product อย่างง่ายกัน:

import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class Product {

    @Id
    private Long id;
    private String name;
    private double price;

    public Product() {}

    public Product(Long id, String name, double price) {
        this.id = id;
        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 + "}";
    }

    public static void main(String[] args) {
        Product product = new Product(1L, "Laptop", 1200.00);
        System.out.println(product);
    }
}

สร้างคีย์หลักโดยอัตโนมัติ

การกำหนด ID ด้วยตนเองอาจยุ่งยากและเกิดข้อผิดพลาดได้ง่าย ฐานข้อมูลสามารถสร้าง ID ที่ไม่ซ้ำกันให้คุณโดยอัตโนมัติ

ใช้คำอธิบายประกอบ @GeneratedValue ร่วมกับ strategy โดย GenerationType.IDENTITY เป็นตัวเลือกที่ใช้กันทั่วไปสำหรับฐานข้อมูลที่เพิ่มค่าโดยอัตโนมัติ เช่น MySQL และ H2

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

@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) { // No ID in constructor
        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 + "}";
    }

    public static void main(String[] args) {
        Product product = new Product("Keyboard", 75.00);
        // In a real app, ID would be generated by the DB when persisted
        System.out.println("Product created (ID will be generated by DB): " + product);
    }
}

ปรับแต่งการแมปคอลัมน์

โดยค่าเริ่มต้น JPA จะจับคู่ฟิลด์กับคอลัมน์ที่มีชื่อเดียวกัน คุณสามารถปรับแต่งสิ่งนี้ได้โดยใช้คำอธิบายประกอบ @Column

คำอธิบายประกอบนี้ช่วยให้คุณระบุชื่อคอลัมน์ กำหนดว่าจะยอมรับค่าว่างหรือไม่ ความยาว และรายละเอียดอื่น ๆ ได้:

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

@Entity
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "product_name", nullable = false, length = 100)
    private String name;

    @Column(nullable = false)
    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 + "}";
    }

    public static void main(String[] args) {
        Product product = new Product("Mouse", 25.50);
        System.out.println("Product with custom columns: " + product);
    }
}

ทำความรู้จักแหล่งเก็บข้อมูล Spring Data

ตอนนี้เรามีเอนทิตีแล้ว เราจะบันทึกลงฐานข้อมูลหรือดึงข้อมูลออกมาได้อย่างไร นี่คือจุดที่ คลังข้อมูล Spring Data เข้ามามีบทบาท

คลังข้อมูลคืออินเทอร์เฟซที่มีเมธอดทรงพลังซึ่งสร้างไว้ล่วงหน้าสำหรับการดำเนินการทั่วไปกับฐานข้อมูล เช่น สร้าง อ่าน แก้ไข และลบ (CRUD) คุณไม่จำเป็นต้องเขียน SQL เพราะ Spring Data JPA จะสร้างให้โดยอัตโนมัติ

การกำหนดอินเทอร์เฟซ JpaRepository

ในการสร้างคลังข้อมูลสำหรับเอนทิตีของคุณ เพียงกำหนดอินเทอร์เฟซที่สืบทอดจาก JpaRepository ของ Spring Data JPA

JpaRepository รับพารามิเตอร์ชนิดข้อมูลสองตัว ได้แก่ ชนิดของเอนทิตี และ ชนิดของคีย์หลัก

ต่อไปนี้คือตัวอย่างการกำหนดคลังข้อมูลสำหรับเอนทิตี Product ของเรา

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

// Assuming 'Product' entity is defined in the same package or imported
@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
    // Spring Data JPA automatically provides CRUD methods here!
    // You can add custom query methods if needed, e.g.,
    // List<Product> findByName(String name);
}

หมายเหตุ: คำกำกับ @Repository เป็นตัวเลือกเสริม แต่ถือเป็นแนวปฏิบัติที่ดีเพื่อให้โค้ดชัดเจน

เมธอดของคลังข้อมูลที่มีมาให้ในตัว

เมื่อสืบทอดจาก JpaRepository แล้ว ProductRepository ของคุณจะได้รับเมธอดทรงพลังจำนวนมากโดยอัตโนมัติ ตัวอย่างเช่น

  • save(entity): บันทึกเอนทิตีที่ระบุ (แทรกข้อมูลหากเป็นข้อมูลใหม่ และแก้ไขหากมีอยู่แล้ว)
  • findById(id): ดึงเอนทิตีตาม ID โดยส่งคืนค่าเป็น Optional
  • findAll(): ส่งคืนอินสแตนซ์ทั้งหมดของชนิดเอนทิตี
  • delete(entity) หรือ deleteById(id): ลบเอนทิตี

ซึ่งหมายความว่าคุณจะได้ฟังก์ชัน CRUD ครบถ้วนโดยไม่ต้องเขียนโค้ดการทำงานแม้แต่บรรทัดเดียว

การใช้คลังข้อมูลในแอป

ในแอปพลิเคชัน Spring Boot จริง คุณจะฉีดคลังข้อมูลเข้าไปในบริการหรือตัวควบคุมโดยใช้ @Autowired แล้วเรียกใช้เมธอดของคลังข้อมูลนั้น

แม้ที่นี่เราจะไม่สามารถเรียกใช้แอป Spring Boot เต็มรูปแบบที่เชื่อมต่อฐานข้อมูลได้ แต่โค้ดตัวอย่างนี้แสดงแนวคิดการใช้งานภายในคอมโพเนนต์ Spring Boot ทั่วไป

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

// Assuming Product and ProductRepository are defined

@Service
public class ProductService {

    private final ProductRepository productRepository;

    @Autowired
    public ProductService(ProductRepository productRepository) {
        this.productRepository = productRepository;
    }

    public Product createProduct(String name, double price) {
        Product newProduct = new Product(name, price);
        return productRepository.save(newProduct);
    }

    public List<Product> getAllProducts() {
        return productRepository.findAll();
    }

    public Product getProductById(Long id) {
        return productRepository.findById(id).orElse(null);
    }
}
ProductService นี้

ตรวจสอบความเข้าใจเรื่องเอนทิตี

คำกำกับใดต่อไปนี้จำเป็นสำหรับการกำหนดเอนทิตี JPA พื้นฐานที่แมปกับตารางฐานข้อมูลและมีคีย์หลักที่สร้างขึ้นโดยอัตโนมัติ

ทบทวน: เอนทิตีและคลังข้อมูล

ทำได้ดีมาก คุณได้เรียนรู้พื้นฐานของการคงอยู่ของข้อมูลด้วย Spring Data JPA แล้ว

  • เอนทิตี คือคลาส Java ที่มีคำกำกับ @Entity และแมปกับตารางฐานข้อมูล
  • @Id ใช้ระบุคีย์หลัก และ @GeneratedValue ช่วยให้ฐานข้อมูลจัดการการสร้าง ID
  • @Column ช่วยให้คุณปรับแต่งการแมประหว่างฟิลด์กับคอลัมน์ได้
  • คลังข้อมูล คืออินเทอร์เฟซที่สืบทอดจาก JpaRepository<Entity, ID> ซึ่งมีเมธอด CRUD ที่พร้อมใช้งานและทรงพลังโดยไม่ต้องเขียน SQL

บทถัดไป คุณจะได้ลงลึกเกี่ยวกับการดำเนินการ CRUD รูปแบบต่าง ๆ

เริ่มต้นได้ฟรี

เรียนรู้ Java ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
24
บทเรียน
93

คำถามที่พบบ่อย

บทเรียน “การกำหนดเอนทิตีและคลังข้อมูล” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การกำหนดเอนทิตีและคลังข้อมูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Spring Boot 4 Microservices & REST APIs ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Spring Boot 4 Microservices & REST APIs มีบทเรียนทั้งหมด 6 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดเอนทิตีและคลังข้อมูล”

สร้างเอนทิตี JPA เพื่อแมปกับตารางฐานข้อมูล และกำหนดอินเทอร์เฟซคลังข้อมูลสำหรับการเข้าถึงข้อมูล คุณปฏิบัติ Spring Boot 4 Microservices & REST APIs ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Spring Boot 4 Microservices & REST APIs หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Spring Boot 4 Microservices & REST APIs บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 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. การดำเนินการ CRUD ด้วย REST
  6. การดำเนินการ CRUD
← กลับไปที่ Spring Boot 4 Microservices & REST APIs