jpa대한 복습을 전반적으로 진행함
jpa를 사용하기위한 dependency 추가
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
- Spring Data JPA란?
- Spring Data JPA는 JPA를 쉽게 사용할 수 있게 만들어놓은 하나의 모듈입니다.
- JPA를 추상화시킨 Repository 인터페이스를 제공합니다.
- Repository 인터페이스는 Hibernate와 같은 JPA구현체를 사용해서 ****구현한 클래스를 통해 사용됩니다.
- 개발자들은 Repository 인터페이스를 통해 JPA를 간편하게 사용할 수 있게 되었습니다.
- Spring Data JPA는 JPA를 쉽게 사용할 수 있게 만들어놓은 하나의 모듈입니다.
스프링 데이터 JPA가 제공하는 쿼리 메소드 기능 중 메소드 이름으로 쿼리 생성에 대해 알아보자.
스프링 데이터 JPA가 제공하는 쿼리 메소드 기능
- 메소드 이름으로 쿼리 생성
- 메소드 이름으로 JPA NamedQuery 호출
- @Query 어노테이션을 이용한 쿼리 직접 정의
메소드 이름으로 쿼리 생성이란?
메소드 이름을 분석해서 JPQL 쿼리 실행하는 것
JPA vs. Spring Data JPA 비교
순수 JPA
public List<Member> findByUsernameAndAgeGreaterThan(String username, int age) {
return em.createQuery("select m from Member m where m.username = :username and m.age > :age")
.setParameter("username", username)
.setParameter("age", age)
.getResultList();
}
스프링 데이터 JPA
public interface MemberRepository extends JpaRepository<Member, Long> {
List<Member> findByUsernameAndAgeGreaterThan(String username, int age);
}
스프링 데이터 JPA는 알아서 메소드 이름을 분석해서 JPQL을 생성하고 실행해주므로 다음과 같이 간결하게 코드를 줄일 수 있다.
대신 필터 조건에 부합하지 않는 키워드는 사용할 수 없으니 주의해야 한다.
쿼리 메소드 필터 조건
더 자세한 내용은 스프링 데이터 JPA 공식 문서 참고하자.
Spring Data JPA - Reference Documentation
Example 108. Using @Transactional at query methods @Transactional(readOnly = true) public interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") v
docs.spring.io
728x90
'Study > 개발일지' 카테고리의 다른 글
[백엔드온라인TIL] java 학습 18일차 (0) | 2023.06.19 |
---|---|
[백엔드스터디WIL]4주차 학습일지 (1) | 2023.06.16 |
[백엔드온라인TIL] java 학습 16일차 (0) | 2023.06.15 |
[mysql] 수강생 등록 및 삭제 sql 예제 (0) | 2023.06.14 |
[백엔드온라인TIL] java 학습 16일차 (0) | 2023.06.14 |