Tích hợp SpringBoot với Spring Data JPA

1. Thêm dependency khởi động

Để bắt đầu sử dụng Spring Data JPA trong dự án Spring Boot, chúng ta cần thêm dependency khởi động tương ứng vào file pom.xml:

<!-- dependency khởi động cho Spring Data JPA -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

2. Cấu hình ứng dụng

Các cấu hình liên quan đến JPA có thể được thiết lập trong file application.properties:

spring.jpa.hibernate.ddl-auto=update
#spring.jpa.show-sql=true
#spring.jpa.generate-ddl=true

3. Tạo lớp thực thể (Entity)

Sau khi định nghĩa lớp thực thể, ứng dụng sẽ tự động tạo bảng trong cơ sở dữ liệu khi chạy. Dưới đây là ví dụ với lớp Giảng viên:

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

@Entity
@Table(name = "t_teacher")
public class Teacher {

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

    @Column(nullable = false)
    private String fullName;

    @Column(unique = true)
    private String email;

    @Column(name = "phone_number")
    private String phone;
    
    @Column(name = "specialization")
    private String specialization;
}

4. Tạo Repository

Repository là interface cung cấp các phương thức thao tác với cơ sở dữ liệu:

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

@Repository
public interface TeacherRepository extends JpaRepository<Teacher, Integer> {

    @Query("SELECT t FROM Teacher t WHERE t.email = ?1")
    Teacher findByEmail(String email);
}

5. Xây dựng Service Layer

Định nghĩa interface và implementation cho lớp dịch vụ:

public interface TeacherService {
    
    Teacher createTeacher(Teacher teacher);
    
    Teacher getTeacherById(Integer id);
    
    List<Teacher> getAllTeachers();
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class TeacherServiceImpl implements TeacherService {

    @Autowired
    private TeacherRepository teacherRepository;

    @Override
    @Transactional
    public Teacher createTeacher(Teacher teacher) {
        return teacherRepository.save(teacher);
    }

    @Override
    public Teacher getTeacherById(Integer id) {
        return teacherRepository.findById(id).orElse(null);
    }

    @Override
    public List<Teacher> getAllTeachers() {
        return teacherRepository.findAll();
    }
}

6. Tạo Controller

Controller xử lý các yêu cầu HTTP và gọi service tương ứng:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/v1")
public class TeacherController {
    
    @Autowired
    private TeacherService teacherService;

    @PostMapping("/teachers")
    public ResponseEntity<Teacher> addTeacher(@RequestBody Teacher teacher) {
        Teacher createdTeacher = teacherService.createTeacher(teacher);
        return ResponseEntity.ok(createdTeacher);
    }
    
    @GetMapping("/teachers/{id}")
    public ResponseEntity<Teacher> getTeacher(@PathVariable Integer id) {
        Teacher teacher = teacherService.getTeacherById(id);
        if (teacher != null) {
            return ResponseEntity.ok(teacher);
        }
        return ResponseEntity.notFound().build();
    }
    
    @GetMapping("/teachers")
    public List<Teacher> getAllTeachers() {
        return teacherService.getAllTeachers();
    }
}

Thẻ: Spring Boot Spring Data JPA Java Persistence API Repository Pattern REST API

Đăng vào ngày 7 tháng 7 lúc 14:28