본문 바로가기

공부/Spring59

[스프링 데이터 JPA] 벌크성 수정 쿼리에 대해 알아보자 벌크성 수정 쿼리는 언제사용될까? 벌크성 수정 쿼리는 한 번에 모든 내용을 변경해야 할 때 사용한다! JPA를 사용한 벌크 수정 쿼리 스프링 데이터 JPA를 사용한 벌크 수정 쿼리 @Modifying(clearAutomatically = true) @Query("update Member m set m.age = m.age + 1 where m.age >= :age") int bulkAgePlus(@Param("age") int age); 주의사항 @Modifying 어노테이션을 넣어줘야 한다! 사용하지 않으면 예외가 발생한다. 벌크성 쿼리를 실행 후 영속성 컨텍스트를 초기화 해주어야 한다. @Modifying(clearAutomatically = true) 기본값은 false이다. 이 옵션이 없다면 영속.. 2022. 8. 25.
스프링 데이터 JPA에서 페이징과 정렬을 해보자 먼저, 순수 JPA에서의 페이징은 어떻게 할까? 예제로 알아보자. 검색조건은 다음과 같다 검색조건: 나이가 10살 정렬조건: 이름으로 내림차순 페이징 조건: 첫 번째 페이지, 페이지당 데이터는 3건 스프링 데이터 JPA의 페이징과 정렬은 어떻게 할까? 1. 페이징과 정렬 파라미터 org.springframework.data.domain.Sort : 정렬 기능 org.springframework.data.domain.Pageable : 페이징 기능 2. 특별한 반환 타입 org.springframework.data.domain.Page : 추가 count 쿼리 결과를 포함하는 페이징 org.springframework.data.domain.Slice : 추가 count 쿼리 없이 다음 페이지만 확인 가능(.. 2022. 8. 25.
스프링 데이터 JPA의 반환타입을 알아보자 스프링 데이터 JPA는 유연한 반환 타입을 지원한다! 같은 네이밍인 findByUsername 를 통해 Member를 찾아보자 조회 결과가 많거나 없으면 어떻게 될까? 컬렉션 결과없음: 빈 컬렉션 반환 단건 조회 결과없음: null → Optional로 받자 결과 2건 이상: 예외발생 프로젝트에서 Optional를 사용했었는데 다른 경우도 있다는 것을 알게되었다! 2022. 8. 25.
[스프링 데이터 JPA] 파라미터 바인딩 종류와 컬렉션 파라미터 바인딩 파라미터 바인딩에는 두 가지 종류가 있다. 위치 기반 이름 기반 하지만, 위치기반의 경우 순서실수가 바뀔 위험이 있다. 코드 가독성과 유지보수를 위해 이름기반 파라미터 바인딩을 사용하자! 예시 @Query에 적용해보자 public interface MemberRepository extends JpaRepository { @Query("select m from Member m where m.username = :name") Member findMembers(@Param("name") String username); } 컬렉션 파라미터 바인딩을 알아보자 Collection타입으로 in절을 지원한다. @Query("select m from Member m where m.username in :names") L.. 2022. 8. 25.
@Query를 통해 DTO로 조회해보자 먼저 예시를 살펴보자 select이후 new 명령어를 사용한다. 생성자가 맞는 DTO가 필요하다. 위의 예시일 때 DTO는 다음과 같다. public class MemberDto { private Long id; private String username; private String teamName; public MemberDto(Long id, String username, String teamName) { this.id = id; this.username = username; this.teamName = teamName; } } 만약 Enum을 통해 비교한다면 어떻게 사용해야 할까? @Query(value = "select distinct new com.woowacourse.naepyeon.servi.. 2022. 8. 25.
스프링 데이터 JPA에서 쿼리 메소드 기능을 알아보자 쿼리 메소드의 3가지 기능 쿼리 메소드는 3가지 기능을 제공한다. 다음과 같다. 메소드 이름으로 쿼리 생성 (중요) 메소드 이름으로 JPA NamedQuery 호출 (실무에서 자주 사용되지 않음) @Query 어노테이션을 사용해서 레포지토리 인터페이스에 쿼리 직접 정의 (중요) 하나씩 살펴보자. 1. 메소드 이름으로 쿼리 생성 이름과 나이를 통해 회원을 조회한다면? 1-1. 순수 JPA 레포지토리 1-2. 스프링 데이터 JPA public interface MemberRepository extends JpaRepository { List findByUsernameAndAgeGreaterThan(String username, int age); } 애플리케이션 로딩시점에 오류를 발견할 수 있다! → 매우 큰.. 2022. 8. 25.