2024. 5. 21. 03:39ㆍSpring Data
들어가며
JPA
Spring Data JPA는 Spring 기반 어플리케이션에서 JPA(Java Persistence API) 기반 레포지토리(DAO)를 구현해주는 라이브러리이다.
JPA 를 사용하므로 DB에 CRUD(Create, Read, Update, Delete)하는 작업을 더욱 편리하게 진행할 수 있다.
또한 페이징, 동적 쿼리 생성 등 부가적인 기능도 제공한다.
JDBC
Spring Data JDBC(Java Database Connectivity)는 관계형 데이터베이스와 Spring 기반 어플리케이션의 연결을 돕는 Spring Data 하위 라이브러리이다.
spring-boot-starter-data-jpa에 포함되는 의존성이기도 해서 JPA 의존성 주입시 함께 주입된다.
Entity 생성
엔티티(Entitiy)는 관계형 데이터베이스의 테이블과 1:1로 매핑되는 Java 객체이다.
@Table, @Column 등 테이블 정의에 사용되는 어노테이션을 사용할 수 있다.
public class User {
@Id
private long id;
private String firstName;
private String lastName;
// 생성자, Getter, Setter
}
DAO 를 구현해준다
DAO(Data Access Object)는 자바 소스에서 DB에 접근하기 위한 항목을 정의한 객체로, 필드 선언 등 기초 코드가 여러 줄 필요하다.
JPA를 사용하면 그 구현을 대신 진행해주므로 정의, 유지, 패턴, 설정 등을 직접 할 필요가 없다. 즉 DAO 구현체를 전부 대체해준다.
JpaRepository라는 인터페이스를 상속하면 CRUD 메서드 등 내부의 구현체를 전부 불러와주는 것이다.
커스텀 쿼리도 지원한다
JpaRepository를 상속받음으로서 기본적인 CRUD 쿼리들이 생성되었다.
다른 쿼리를 생성하고 싶을 때 JPA에는 몇 가지 방법이 있다.
- 인터페이스 내에 메서드를 정의한다.
- @Query 어노테이션과 JPQL 을 사용한 쿼리를 작성한다.
- Querydsl 등 Spring Data가 지원하는 외부 구현체의 도움을 받는다.
- JPA의 네이밍 쿼리를 사용한다.
이 중 외부 구현체를 사용하는 3번째 옵션이 가장 다양하고 동적인 쿼리를 작성할 수 있다.
자동 생성 쿼리
JpaRepository를 상속받게 되면, JPA는 엔티티 객체를 분석하여 정의된 필드들에 해당하는 쿼리를 생성 가능하게 해준다.
User 테이블에서 Name으로 유저를 조회하고 싶다면, 아래와 같은 메서드를 정의하기만 하면 된다.
public interface UserDAO extends JpaRepository<User, Long> {
User findByName(String name);
}
커스텀 생성 쿼리
JPQL이라는 JPA가 제공하는 쿼리 번역 질의어를 사용하여 직접 작성한 쿼리를 사용할 수도 있다.
@Query("SELECT u FROM Foo u WHERE LOWER(u.name) = LOWER(:name)")
User retrieveByName(@Param("name") String name);
Transaction 설정
DB에 접근하는 레이어이므로 트랜젝션 관리가 필요하다.
이는 서비스 코드에서 @Transactional 어노테이션을 사용하여 제어할 수 있다.
Resources
'Spring Data' 카테고리의 다른 글
Spring Data란 무엇인가 (0) | 2024.05.08 |
---|