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();
}
}