Spring Boot คือ ตอนที่ 7 : เชื่อมต่อฐานข้อมูลด้วย Spring Data JPA

  1. เริ่มต้นใช้งาน (Getting Started)
  2. การทำแอพ Spring Boot
    การตั้งค่าแอปพลิเคชัน
    การสร้างโมเดลโดเมน (Domain Model)
    การสร้างพื้นที่เก็บข้อมูล (Repository)
    การสร้างบริการ (Service)
    การสร้างคอนโทรลเลอร์ (Controller)
    เรียกใช้แอปพลิเคชัน (Running the Application)

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

ในบทความนี้ เราจะแนะนำขั้นตอนการทำแอพโดยใช้ Spring Boot และ Spring Data JPA เพื่อแสดงให้เห็นว่าเทคโนโลยีเหล่านี้ช่วยลดความซับซ้อนของกระบวนการทำแอพได้อย่างไร

1. เริ่มต้นใช้งาน (Getting Started)

ก่อนอื่น เราต้องตั้งค่าสภาพแวดล้อมการทำแอพของเรา ติดตั้ง Java Development Kit (JDK) และ Integrated Development Environment (IDE) เช่น IntelliJ IDEA หรือ Spring Tool Suite (STS) เราจะใช้ Maven เป็นเครื่องมือสร้าง เมื่อติดตั้งและกำหนดค่าเครื่องมือเหล่านี้แล้ว เราก็เริ่มทำแอพ Spring Boot ได้เลย

2. การทำแอพ Spring Boot

เราจะใช้ Spring Initializr ซึ่งเป็นเครื่องมือบนเว็บที่ให้บริการโดย Spring ในการทำแอพของเรา ทำตามขั้นตอนเหล่านี้:

  1. ไปที่https://start.spring.io/
  2. เลือก “Maven Project” ด้วย Java และ Spring Boot เวอร์ชันที่เสถียรที่สุด
  3. กรอกข้อมูลเมตาของโครงการ ตัวอย่างเช่น Group สามารถเป็น ‘com.example’ และ Artifact สามารถเป็น ‘jpa-demo’
  4. เพิ่ม ‘Spring Web’, ‘Spring Data JPA’ และ ‘H2 Database’ เป็นการอ้างอิง
  5. คลิกที่ “Generate” เพื่อดาวน์โหลดโครงการ

การตั้งค่าแอปพลิเคชัน

หลังจากดาวน์โหลดโปรเจ็กต์แล้ว ให้อิมพอร์ตลงใน IDE ที่คุณต้องการ ในโปรเจ็กต์นี้ คุณจะพบไฟล์ pom.xml ซึ่งเป็นโมเดลวัตถุโปรเจ็กต์สำหรับ Maven ประกอบด้วยรายละเอียดเกี่ยวกับโครงการและรายละเอียดการกำหนดค่าที่ใช้โดย Maven เพื่อสร้างโครงการ

Spring Boot กำหนดค่าแอปพลิเคชันของคุณโดยอัตโนมัติตามการอ้างอิงที่คุณเพิ่ม ตัวอย่างเช่น ‘H2 Database’ และ ‘Spring Data JPA’ ใน classpath ของคุณจะตั้งค่าฐานข้อมูล H2 ในหน่วยความจำโดยอัตโนมัติ และกำหนดค่า Spring Data JPA ตามลำดับ

การสร้างโมเดลโดเมน (Domain Model)

แอปพลิเคชันของเราจะเป็นระบบจัดการหนังสืออย่างง่าย เราจะเริ่มต้นด้วยการสร้างเอนทิตีหนังสือ

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

@Entity
public class Book {

    @Id
    @GeneratedValue
    private Long id;
    private String title;
    private String author;

    // getters and setters omitted for brevity
}

คำอธิบายประกอบ (annotation) @Entity ระบุว่าคลาสเป็นเอนทิตี JPA คำอธิบายประกอบ (annotation) @Id และ @GeneratedValue ใช้เพื่อกำหนดคีย์หลักและกลยุทธ์การสร้างสำหรับคีย์หลักตามลำดับ

การสร้างพื้นที่เก็บข้อมูล (Repository)

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

import org.springframework.data.repository.CrudRepository;

public interface BookRepository extends CrudRepository<Book, Long> {
}

เพียงแค่ขยาย CrudRepository<T, ID>Spring Data JPA จะจัดเตรียมวิธีการโดยอัตโนมัติ BookRepository เช่นsave(), findOne(), findAll(), และ count()

การสร้างบริการ (Service)

เราสร้างบริการเพื่อจัดการตรรกะทางธุรกิจของแอปพลิเคชันของเรา มาสร้างคลาส BookService กันเถอะ:

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class BookService {

    private final BookRepository repository;

    public BookService(BookRepository repository) {
        this.repository = repository;
    }

    @Transactional
    public Book save(Book book) {
        return repository.save(book);
    }

    @Transactional(readOnly = true)
    public Iterable<Book> findAll() {
        return repository.findAll();
    }

    // more methods for delete, update, etc.
}

คำอธิบายประกอบ (annotation) @Service ระบุว่าคลาสนี้เป็นบริการที่มีการจัดการของ Spring คำอธิบายประกอบ (annotation) @Transactional ใช้เพื่อเปิดใช้งานการจัดการธุรกรรมสำหรับเมธอด

การสร้างคอนโทรลเลอร์ (Controller)

คอนโทรลเลอร์ใน Spring Boot เป็นที่จัดการคำขอ HTTP ที่เข้ามา มาสร้าง BookController:

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/books")
public class BookController {

    private final BookService service;

    public BookController(BookService service) {
        this.service = service;
    }

    @PostMapping
    public Book create(@RequestBody Book book) {
        return service.save(book);
    }

    @GetMapping
    public Iterable<Book> read() {
        return service.findAll();
    }

    // more methods for update, delete, etc.
}

คำอธิบายประกอบ (annotation) @RestController ใช้เพื่อกำหนดตัวควบคุมและ @RequestMapping("/books") แมปการดำเนินการ HTTP ทั้งหมดตามค่าเริ่มต้นกับตัวควบคุมนี้

เรียกใช้แอปพลิเคชัน (Running the Application)

เราสามารถเรียกใช้แอปพลิเคชันของเราได้โดยการเรียกใช้คลาสหลักที่มีคำอธิบายประกอบ (annotation) @SpringBootApplication หรือโดยใช้ปลั๊กอิน Maven Spring Boot ด้วยคำสั่ง mvn spring-boot:run


เราได้สาธิตวิธีทำแอพ Spring Boot ด้วย Spring Data JPA ผ่านบทช่วยสอนนี้ การรวมกันที่ทรงพลังนี้ทำให้ง่ายต่อการทำแอพระดับองค์กรด้วยโค้ดสำเร็จรูปขั้นต่ำ (minimum boilerplate code) ด้วยการใช้ประโยชน์จากเครื่องมือเหล่านี้ นักพัฒนาสามารถมุ่งเน้นไปที่ตรรกะทางธุรกิจมากขึ้นและน้อยลงในการกำหนดค่าและการตั้งค่า


Spring Boot คืออะไร

Spring Boot คือ ตอนที่ 6 : สปริงบูตแอคทูเอเตอร์ (Actuator)
Spring Boot คือ ตอนที่ 8 : การจัดการข้อยกเว้น (Exception Handling)