--- tags: jpa, spring-data --- Spring Data JPA === ## JpaRepository Spring Data JPA 는 CRUD 를 간편하게 만들수 있게 interface 를 제공 한다. 아래처럼 JpaRepository 를 상속하기만 하면 된다. ```java= public interface StudentRepository extends JpaRepository<Student, Long> { List<Student> findByStudy(Study studyId); } ``` > interface 만 작성해도 되며, 실행시점에 Spring Data JPA 가 앱 기동 시점에 구현체를 주입 한다. JpaRepository 를 상속만 하면, 사용할수 있는 public 메소드 들은 다음과 같이 이미 다양하게 만들어져 있다. ![](https://i.imgur.com/m9wZPAs.png) 사용하기 위해서는 의존성을 추가 해야 한다. artifactId 는 `spring-boot-starter-data-jpa` 이다. ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> ``` 참고로 책에서는 spring-data-jpa 와 spring-data-commons 를 주입 하라고 했지만 spring-boot-starter-data-jpa 안에 둘다 들어 있다. Spring Boot 의 장점이다. 또한 starter 모듈들은 별도로 버전명을 명시하지 않아도 된다. Spring Boot 버전에 따라 적절한 버전을 넣어주기 때문이다. 당연히 하위모듈과의 궁합도 좋을것이다. > 개인적인 경험 인데, spring commons 4.1 버전대를, web은 4.0 버전대를 사용하면, commons 의 클래스나 메소드가 없어서 이슈를 겪었던적이 있었다. ## Spring Data 와 Spring Data JPA Spring Data JPA는 Spring Data 를 상속 받고 있다. 구조도는 다음과 같다. ![](https://i.imgur.com/AgUmlVS.jpg) > Spring Data 모듈은 JPA 외에 카산드라, 몽고DB, 엘라스틱서치 등이 있다 > https://spring.io/projects/spring-data 참고. 사용할수 있는 메소드도 좀더 많아지는데, 다음을 참고 하면 된다. ![](https://i.imgur.com/LL6jJkP.jpg =70%x70%) ## Spring Data JPA ### 쿼리메소드 메소드 이름으로 쿼리를 만들수 있고, ```java= List<Team> findByNameLike(String teamName); ``` 위 쿼리메소드를 실행하면 쿼리는 다음과 같이 발생한다. ``` select team0_.id as id1_1_, team0_.name as name2_1_ from team team0_ where team0_.name like ? escape ? ```