티스토리 뷰
여기서의 포스팅은 맛보기 수육
Spring Data의 등장
- 관계형 데이터베이스 중심의 세상에서 여러 데이터 관련 신흥 세력(기술)들이 등장
- 기술이 다른 것이지, "데이터"를 보관하고 관리한다는 부분에 있어 공통점이 있는 것을 발견
- 동일 인터페이스 기반, 페이징 처리 등 추상화를 통해 공통으로 기술을 제공할 수 있게 된다.
공통 기능 제공 - https://spring.io/projects/spring-data
Spring Data
Spring Data’s mission is to provide a familiar and consistent, Spring-based programming model for data access while still retaining the special traits of the underlying data store. It makes it easy to use data access technologies, relational and non-rela
spring.io
Spring Data JPA
- Spring Data Common의 기술을 기본적으로 가지고, JPA 기술을 추가로 가지고 있다.
- JpaRepository를 상속받아 기본적인(공통) 기능을 제공받는다.
- 구현 클래스는 동적 프록시 기술을 사용하여 자동으로 만들어준다. (인터페이스만 생성)
- 메서드 이름으로 쿼리를 생성해준다.
- @Query 네이티브 쿼리를 지원한다. (직접 sql 작성)
기술 사용법
JpaRepository 사용법 - JpaRepository인터페이스 상속 받은 후, 제네릭에 관리할 <엔티티, 엔티티PK>를 주면 된다.
쿼리 메서드 사용법 - 인터페이스에 메서드만 적어두면, 메서드 이름을 분석하여 쿼리를 자동 생성 후 실행해준다.
+) 자동으로 생성해주는 필터 조건이 있다.
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation
Spring Data JPA - Reference Documentation
Example 121. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del
docs.spring.io
위 코드에서 볼 수 있는 것처럼 쿼리메서드를 사용할 수 있고, 직접 JPQL을 사용할 수 있다.
findAll 메서드가 존재하지 않는 이유는 JpaRepository가 공통으로 제공하고 있는 기능이기 때문이다.
QueryDSL의 등장
- Query의 문제점 : String타입, 실행 해보기 전까지는 옳은지 아닌지 판단 불가능하다..
- 쿼리를 Java로 type-safe하게 개발할 수 있게 지원하는 프레임워크 -> 주로 JPQL에 사용한다.
- QueryDSL - Query Domain Specific Language
- 쿼리에 특화된 프로그래밍 언어, 다양한 저장소 쿼리 기능 통합을 지원하고 단순, 간결하다.
--> QueryDSL은 JPQL 빌더, JPA를 편리하게 사용할 수 있는 언어!
+) 단순 쿼리 : SpringDataJPA, 복잡(동적) 쿼리 : QueryDSL
본 포스팅은 인프런 강의 김영한님의
[ 스프링 DB 2편 - 데이터 접근 활용 기술 ] 을 수강하며 작성한 내용입니다.