본문 바로가기

Study/개발일지

[백엔드온라인TIL] java 학습 17일차

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'
}
  • Spring Data JPA란?
    • Spring Data JPAJPA를 쉽게 사용할 수 있게 만들어놓은 하나의 모듈입니다.
      • JPA를 추상화시킨 Repository 인터페이스를 제공합니다.
    • Repository 인터페이스Hibernate와 같은 JPA구현체를 사용해서 ****구현한 클래스를 통해 사용됩니다.
      • 개발자들은 Repository 인터페이스를 통해 JPA를 간편하게 사용할 수 있게 되었습니다.
    •  

 

 

스프링 데이터 JPA가 제공하는 쿼리 메소드 기능 중 메소드 이름으로 쿼리 생성에 대해 알아보자. 

 

스프링 데이터 JPA가 제공하는 쿼리 메소드 기능 
  1. 메소드 이름으로 쿼리 생성
  2. 메소드 이름으로 JPA NamedQuery 호출
  3. @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