본문 바로가기

Spring boot/스프링 데이터 JPA

(5)
외래키 참조 쿼리 비교(findByMemberId, findByMember) 프로젝트를 진행할 때 쿼리를 하나하나 살펴보는 편인데... 문뜩 의문점 발견했습니당 member entity가 team을 가진다고 하면, findByTeamId와 findByTeam 쿼리가 다르게 나가는 것을 알았습니다..! teamId로 찾을땐 left outer join을 하길래 무슨 차이일지, 실무에서는 어떤 것을 더 많이 사용하는지 궁금했습니다. 이 차이를 언급하며 내 인프런 교수님 영한님께 여쭤봤을땐 이 대답을 들었고 저 강의를 참고하면 // findByTeam Team team = em.find(Team.class, 1L); String qlString = "select m from Member m where m.team = :team"; List resultList = em.createQue..
[spring boot] 벌크성 수정 쿼리 // member repository @Modifying(clearAutomatically = true) @Query("update Member m set m.age = m.age + 1 where m.age >= :age") int bulkAgePlus(@Param("age") int age); @Modifying : jpa에서 .excuteUpdate와 동일, update 쿼리는 @Modifying 필수 벌크성 쿼리 실행 후 영속성 컨텍스트 초기화: @Modifying(clearAutomatically = true) (기본값은 false ) 따로 flush, clear 안 해도 됨. 반환타입 : int // test @Test public void bulkUpdate() throws Exception..
[spring boot] 페이징과 정렬 페이징과 정렬 파라미터 org.springframework.data.domain.Pageable : 페이징 기능 (내부에 Sort 포함) org.springframework.data.domain.Sort : 정렬 기능 특별한 반환 타입 org.springframework.data.domain.Page : 추가 count 쿼리 결과를 포함하는 페이징 org.springframework.data.domain.Slice : 추가 count 쿼리 없이 다음 페이지 유무만 확인 가능 (내부적으로 limit+1 조회) List (자바 컬렉션) : 추가 count 쿼리 없이 결과만 반환 페이징과 정렬 사용 예제 Page findByUsername(String name, Pageable pageable); //tota..
[spring boot] 반환 타입 스프링 데이터 JPA는 유연한 반환 타입 지원 List findByUsername(String name); //컬렉션 Member findByUsername(String name); //단건 Optional findByUsername(String name); //단건 Optional 조회 결과가 많거나 없으면? (ex. 특이한 이름을 찾는 경우) 컬렉션 결과 없음: 빈 컬렉션 반환 단건 조회 결과 없음: null 반환 결과가 2건 이상: javax.persistence.NonUniqueResultException 예외 발생
[spring boot] @Query, 메서드 이름으로 생성, NamedQuery 스프링 데이터 JPA가 제공하는 기능 (사용 순위) @Query 어노테이션을 사용해서 repository interface에 쿼리 직접 정의 메소드 이름으로 쿼리 생성 (메서드 이름에 파라매터 많아지면 지저분) 메소드 이름으로 JPA NamedQuery 호출 1. @Query, 리포지토리 메소드에 쿼리 정의하기 //member repository public interface MemberRepository extends JpaRepository { @Query("select m from Member m where m.username= :username and m.age = :age") List findUser(@Param("username") String username, @Param("age") int..