Java ORM22 [JPA] Spring Data JPA가 제공하는 QueryDsl 기능 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 1. 인터페이스 지원 - QuerydslPredicateExecutor " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 여기서 소개하는 기능은 제약이 커서 복잡한 실무 환경에서 사용하기에는 많이 부족하다. 그래도 Spring Data 에서 제공하는 기능이므로 간단히 소개하고, 왜 부족한지 설명하겠다. 1-1) Interface 지원 - QuerydslPredicateExecutor 기존의 repository에 다음과 같이 QuerydslPredicateExecutor를 추가로 상속하게 되었다. public interface MemberRepository.. BackEnd/JPA 2022. 5. 16. [JPA] 실무 활용 - Spring Data JPA와 Querydsl 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 이번 시간에는 이전에 순수 JPA로 만들었던 repository들을 Spring Data JPA를 통해 만들어 보자. 1. Spring Data JPA 리포지토리로 변경 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 ▶ Spring Data JPA - MemberRepository 코드 작성 public interface MemberRepository extends JpaRepository { List findByUsername(String username); } 기존의 순수 JPA를 활용한 MemberJpaRepository 와 비교해볼때, 상당히 .. BackEnd/JPA 2022. 5. 15. [JPA] 실무 활용 - 순수 JPA와 Querydsl 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 이번 글은 다음과 같은 순서로 이어질 것 이다. 순수 JPA 리포지토리와 Querydsl 동적쿼리 Builder 적용 동적쿼리 Where 적용 조회 API 컨트롤러 개발 1. 순수 JPA 리포지토리와 Querydsl " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 우선 순수 JPA를 기반으로 repository를 하나 만들자. Repository public class MemberJpaRepository { private final EntityManager em; private final JPAQueryFactory jpaQueryFactory; pub.. BackEnd/JPA 2022. 5. 15. [JPA] QueryDSL 중급문법 - 2 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 4. 동적 쿼리 - BooleanBuilder 사용 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 동적 쿼리를 해결하는 방식에는 2가지 방식이 존제한다. BooleanBuilder Where 다중 파라미터 사용 각각이 다 장단점이 있는 방식이다. 이에 대하여 알아보자. ▶ BooleanBuilder 를 사용하는 방법 @Test public void dynamic_query_boolean_builder_test() { String usernameParam = "member1"; Integer ageParam = 10; List result = searc.. BackEnd/JPA 2022. 5. 14. [JPA] QueryDSL 중급문법 - 1 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 1. 프로젝션과 결과 반환 - 기본 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 프로젝션이란 열 단위로 조회하는 것을 의미한다. (select는 행 단위 조회) 프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있다. 프로젝션 대상이 둘 이상이면 튜플이나 DTO로 조회할 수 있다. 1-1) 프로젝션 대상이 하나인 경우 @Test public void simple_projection_test() { List result = queryFactory .select(member.username) .from(member) .fetch(); for (Strin.. BackEnd/JPA 2022. 5. 14. [JPA] 나머지 기능들 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 이번 시간에 배우는 나머지 기능들을 실무에서 자주 사용되지는 않는다. 다만 알아두면 필요한 순간에 가끔 사용할 수 있을 것 이다. Specifications은 JPA Criteria와 관련된 기술 이다. 문제는 실무에서는 JPA Criteria를 거의 안쓴다! 대신에 QueryDSL를 사용하기 때문이다. 또한 Query By Example 도 실무에서 직접 사용하기는 애매한 부분이 있는 기술들이다. 따라서 해당 강의 영상 부분에 대한 정리는 생략하도록 하겠습니다 ㅎㅎ 1. Projections " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 회원의 이름.. BackEnd/JPA 2022. 5. 7. [JPA] 쿼리 메소드 기능 - 4 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 9. 벌크성 수정 쿼리 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 단건의 Entity에 대한 수정이 아닌, 예를 들어 "모든 직원의 연봉을 10% 인상하라"와 같은 수정을 해야할 때 벌크성 수정 쿼리가 필요하다! 우선 순수 JPA를 사용하는 코드부터 살펴보자. @Repository public class MemberJpaRepository { @PersistenceContext private EntityManager em; public int bulkAgePlus(int age) { return em.createQuery("update Member.. BackEnd/JPA 2022. 5. 4. [JPA] 쿼리 메소드 기능 - 2 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 4. @Query, 값, DTO 조회하기 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이전시간에는 Entity를 조회하는 방식에 대하여 알아보았다. 이번시간에는 값을 찾아오는 법을 살펴보자. 1) 단순 값 조회하기 예를 들어 사용자의 이름 목록을 받아오고 싶다면 어떻게 해야할까? 이전과 동일하게 @Query를 사용하면 된다. public interface MemberRepository extends JpaRepository { @Query("select m.username from Member m") List findUsernameList(); } .. BackEnd/JPA 2022. 5. 4. [JPA] 예제 도메인 모델 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 1. 예제 도메인 모델과 동작확인 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 앞으로 활용할 간단한 도메인 entity를 하나 만들어보자. 다음과 같다. 위 다이어그램을 통해 만들어지는 Entity는 다음과 같다. Member : Team = N : 1 의 연관관계를 가지고 있다. 1. Member 코드 @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @ToString(of = {"id", "username", "age"}) public class Member { @Id @Gen.. BackEnd/JPA 2022. 5. 2. [JPA] Open Session In View (OSIV) 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 1. OSIV와 성능 최적화 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 JPA의 Entity Manager를 Hibernate에서는 Session이라 부른다. Spring Boot의 프로젝트를 실행해보면 WARN이 기본적으로 하나 뜬다. spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this .. BackEnd/JPA 2022. 4. 24. [JPA] 컬렉션 조회 최적화 - 4 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 7. 주문 조회 V6: JPA에서 DTO로 직접 조회, 플랫 데이터 최적화 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번시간에는 지난 V5 버전을 더욱 최적화 하여 쿼리1 번으로 끝내보자! 우선 컨트롤러는 다음과 같다. @GetMapping("/api/v6/orders") public List ordersV6() { return orderQueryRepository.findAllByDtoFlat(); } 이번에는 데이터를 한번에 가져오기 위해 Order, OrderItems, Item을 전부 Join할 것 이다. 다만 그냥 Join을 하게 되면 .. BackEnd/JPA 2022. 4. 24. [JPA] 컬렉션 조회 최적화 - 3 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 5. 주문 조회 V4: JPA에서 DTO 직접 조회 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번 시간에는 DTO를 직접 반환하도록 코드를 변경해 보자. join을 해도 tuple의 수가 증가하지 않는 ToOne 관계는 JOIN으로 최적화 하기 쉬우므로 한번에 조회하고, ToMany 관계는 최적화 하기 어려우므로 findOrderItems() 같은 별도의 메서드를 만들어 처리할 것 이다. 우선 컨트롤러는 다음과 같다. @GetMapping("/api/v4/orders") public List ordersV4() { return orderQuery.. BackEnd/JPA 2022. 4. 24. 이전 1 2 다음