FireDrago
[Spring] 스프링 데이터 JPA 본문
이전 포스팅에서 JPA 에 대하여 간단하게 살펴봤다.
이번에는 JPA를 더 편리하게 사용하기 위해서 스프링에서 제공하는
스프링 데이터 JPA에 대해 알아보자
스프링 데이터와 스프링 데이터 JPA

스프링은 특정 DB 기술에 의존하지 않기 위해 여러 DB 기술(JDBC, JPA, ...)을 통합하는 스프링데이터 인터페이스를 제공한다. 그 하위 인터페이스에 JPA 사용을 편리하게 해주는 스프링 데이터 JPA 인터페이스가 있다.
스프링 데이터 JPA는 어떤 편리함을 제공하는지 확인해보자
스프링 데이터 JPA 적용
먼저 스프링 데이터 JPA를 사용하기 위해서 의존성을 추가해줘야 하는데 우리는 JPA를 사용하면서 이미
build.gradle에 의존성을 추가했다. 이전 포스팅 코드를 살펴보자
[Spring] JPA 사용하기
SQL Mapper 기술로는 JDBCTemplate , MyBatis 등이 대표적이다. 그런데 SQLMapper 기술은 개발자가 직접 SQL을 입력해야한다. 반면에 ORM 기술은 SQL을 대신 작성해준다. 생산성이 훨씬 더 커지는 것이다. JPA는
flowerdragon95.tistory.com

1. 먼저 JpaRepository <도메인, Pk키 타입> 을 "상속" 받는다. (인터페이스 상속)
- JpaRepository 가 바로 스프링데이터 JPA가 제공하는 기본 인터페이스다.
- 인터페이스로 생성하는 것을 잊지말자!
2. 메서드 이름을 통해 실행하고자 하는 기능을 만들어낸다.
- 스프링은 메서드 이름을 통해 구현체에서 sql문을 자동으로 생성하고 실행한다.
| 기능 | 메소드 | 반환타입 |
| 조회 | find ... By, read ... By, query ...By, get ...By | |
| COUNT | count ... By | Long |
| EXIST | exists_By | boolean |
| 삭제 | delete ... By | |
| DISTINCT | findDistinct, findMemberDistictBy | |
| LIMIT | findFirst3, findFirst, findTop | |
| 스프링 데이터 JPA 공식 문서 참고 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.querymethods.query-creation https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.limit-queryresult |
||
3. findByItemNameLikeAndPriceLessThanEqual 메서드와 findItems 는 같은 역할을 한다.
- 메서드 명이 복잡해지는 경우, @Query( JDQL) 애너테이션으로 쿼리를 직접 입력할 수 있다.
이 경우 파라미터가 여러개라면 반드시 @Param 애너테이션으로 파라미터 맵핑 해줘야 한다.
스프링 데이터 JPA 사용하기
인터페이스를 통해 기본적인 CRUD 기능과 이름검색, 가격검색 기능을 구현하는 구현체가 자동으로 만들어진다.
이제 Repository 객체를 통해 사용하는 코드를 살펴보자


1. 기존의 서비스 객체에서 ItemRepository 인터페이스에 의존하므로, JpaRepositoryV2는 ItemRepository 를 구현한다.
2. 우리가 인터페이스로 정의한 SpringDataJpaItemRepository 인터페이스에는 save 메서드를 정의하지 않았다.
그런데 save 메서드를 사용할 수 있는 이유는 스프링이 동적 프록시 기술로 등록한 구현체에 기본적인
CRUD 기능을 지원하고 있기 때문이다. 개발자는 기본CRUD 기능을 직접 정의해줄 필요가 없다.

1. 그 외 메서드는 JPA를 사용할때와 비슷한 방식으로 사용하면 된다.
2. findAll의 경우 QueryDsl 을 사용하지 않았기 때문에 코드가 다소 복잡하다
'프로그래밍 > Spring' 카테고리의 다른 글
| [Spring] 스프링 트랜잭션 전파 (0) | 2024.03.18 |
|---|---|
| [Spring] 스프링 트랜잭션 이해 (0) | 2024.03.15 |
| [Spring] MyBatis 사용하기 (0) | 2024.03.07 |
| [Spring] DB 연결을 테스트 하기 (0) | 2024.03.06 |
| [Spring] DB 예외처리 (0) | 2024.03.02 |
