728x90
JPA란?
Java Persistence API(JPA)는 자바 진영의 ORM 표준 기술이다.
ORM(Object-Relational Mapping)이란 객체와 관계형 데이터베이스를 매핑해주는 기술을 의미한다.
개발자가 SQL 쿼리를 직접 작성하는 대신,
객체지향적으로 프로그래밍을 하면 JPA가 적절한 SQL을 생성해서 데이터베이스와 통신을 해준다.
예시 코드를 함께 살펴보자.
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private int age;
}
위 코드에서
- @Entity 애노테이션은 이 클래스가 데이터베이스 테이블과 매핑될 것임을 나타낸다.
- @Id는 기본키를 지정하고
- @GeneratedValue는 기본키 생성 전략을 설정한다.
Spring Data JPA란?
Spring Data JPA는 JPA를 더욱 편리하게 사용할 수 있도록 스프링 프레임워크에서 제공하는 프로젝트다.
데이터 접근 계층을 개발할 때 지루하게 반복되는 CRUD 문제를 해결해주는 장점이 있다!
public interface StudentRepository extends JpaRepository<Student, Long> {
List<Student> findByNameContaining(String name);
List<Student> findByAgeLessThan(int age);
}
위 코드에서 JpaRepository를 상속받는 것만으로도 기본적인 CRUD 메서드들이 자동으로 생성된다.
*메서드 이름만으로도 원하는 쿼리를 생성할 수 있다!*
Entity와 연관관계
JPA에서는 데이터베이스의 테이블 간 관계를 객체의 참조로 표현한다.
다양한 연관관계를 매핑할 수 있는데 주로 사용되는 연관관계는 아래와 같다:
- 일대일
- 일대다
- 다대일
- 다대다
@Entity
public class Course {
@Id
@GeneratedValue
private Long id;
@ManyToOne
@JoinColumn(name = "professor_id")
private Professor professor;
}
위 코드는 강의와 교수 간의 다대일 관계를 표현하는데, 하나의 교수가 여러 강의를 담당할 수 있음을 나타낸다.
Repository와 쿼리 메서드
Spring Data JPA는 메서드 이름만으로 쿼리를 생성해주는 강력한 기능을 제공한다.
또한 @Query 애노테이션을 사용하여 직접 쿼리를 정의할 수도 있다.
public interface CourseRepository extends JpaRepository<Course, Long> {
@Query("SELECT c FROM Course c WHERE c.professor.department = :dept")
List<Course> findCoursesByDepartment(@Param("dept") String department);
}
위 코드는 특정 학과의 모든 강의를 조회하는 커스텀 쿼리를 정의한 예시다.
(@Query 애노테이션을 통해 JPQL을 직접 작성할 수 있다!)
728x90
'Spring' 카테고리의 다른 글
[Spring] ✨ QueryDSL 개념알기 ✨ (1) | 2025.01.20 |
---|---|
[Spring] MyBatis 개념정리 🤩 (0) | 2025.01.20 |
[Spring] JdbcTemplate으로 데이터베이스 접근하기! (0) | 2025.01.20 |
[Spring] 🔎 DataSource와 트랜잭션 개념정리 🔎 (2) | 2025.01.20 |
[Spring] Controller의 Return Type과 Parameter 가이드 👍 (1) | 2025.01.20 |