JPA정리25 [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] 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] QueryDSL 기본문법 - 3 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 8. 기본 Join " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 조인의 기본 문법은 첫 번째 파라미터에 조인 대상을 지정하고, 두 번째 파라미터에 별칭(alias)으로 사용할 Q 타입을 지정하면 된다. join(조인 대상, 별칭으로 사용할 Q타입) 테스트 코드를 통해서 Join을 알아보자. @DisplayName("팀 A에 소속된 모든 회원 찾기") @Test public void join_test() { List result = queryFactory .selectFrom(member) .join(member.team, team) .where(te.. BackEnd/JPA 2022. 5. 14. [JPA] QueryDSL 기본문법 - 1 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 1. JPQL vs Querydsl " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번시간에는 JPQL과 QueryDSL을 비교해보는 시간이다! 우선 다음과 같이 @BeforeEach를 통해 초기 데이터를 추가해주자. @SpringBootTest @Transactional public class QueryDslBasicTest { @Autowired EntityManager em; JPAQueryFactory queryFactory; @BeforeEach public void before() { queryFactory = new JPAQueryFact.. BackEnd/JPA 2022. 5. 13. [JPA] 나머지 기능들 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 이번 시간에 배우는 나머지 기능들을 실무에서 자주 사용되지는 않는다. 다만 알아두면 필요한 순간에 가끔 사용할 수 있을 것 이다. Specifications은 JPA Criteria와 관련된 기술 이다. 문제는 실무에서는 JPA Criteria를 거의 안쓴다! 대신에 QueryDSL를 사용하기 때문이다. 또한 Query By Example 도 실무에서 직접 사용하기는 애매한 부분이 있는 기술들이다. 따라서 해당 강의 영상 부분에 대한 정리는 생략하도록 하겠습니다 ㅎㅎ 1. Projections " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 회원의 이름.. BackEnd/JPA 2022. 5. 7. [JPA] 스프링 데이터 JPA 분석 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 1. 스프링 데이터 JPA 구현체 분석 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번시간에는 Spring Data JPA가 어떻게 동작하는지 내부적인 구현체를 분석해보자! SimpleJpaRepository가 핵심 구현체 이다! @Repository @Transactional(readOnly = true) public class SimpleJpaRepository ... { @Transactional public S save(S entity) { if (entityInformation.isNew(entity)) { em.persist(entity.. BackEnd/JPA 2022. 5. 6. [JPA] 확장 기능 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 1. 사용자 정의 리포지토리 구현 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번 시간에는 실무에서 매우 중요한 내용이다. Spring Data JPA Repository는 인터페이스만 정의하고 구현체는 스프링이 자동 생성하게 된다. 문제는! Spring Data JPA가 제공하는 인터페이스에서 일부를 수정하려면 나머지 인터페이스 들도 모두 직접 구현해야 하기 때문에 현실적이지 못하다. 또한 다른 기술들, 예를 들어 MyBatis, QueryDsl 과 같은 기능도 함께 사용하고 싶다면? 다양한 이유로 인터페이스의 메서드를 직접 구현하고 싶다면 어떻.. BackEnd/JPA 2022. 5. 6. [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] 쿼리 메소드 기능 - 3 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 7. 순수 JPA 페이징과 정렬 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번 시간에는 순수하게 JPA를 사용해 페이징 처리를 해보고, 다음번에 Spring Data JPA를 통해 페이징 처리를 하자. 다음 조건에 맞도록 페이징 처리를 해보자. 검색 조건: 나이가 10살 정렬 조건: 이름으로 내림차순 페이징 조건: 첫 번째 페이지, 페이지당 보여줄 데이터는 3건 우선 Repository 코드는 다음과 같다. @Repository public class MemberJpaRepository { @PersistenceContext private Ent.. BackEnd/JPA 2022. 5. 4. [JPA] 컬렉션 조회 최적화 - 1 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 1. 주문 조회 V1: 엔티티 직접 노출 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 컬렉션 조회같은 경우 1:N 에서 N의 데이터 수가 3건 이라면, JOIN시 1쪽 또한 3건으로 증가해 버린다. Order - OrderItem - Item 의 연관관계가 (1 : N) (N : 1) 로 되어있는 상황이다. Order 와 Item의 다대다 관계를 중간 Order_Item 테이블을 통하여 만든 상황이다. 우선 다음 컨트롤러를 확인해 보자. @RestController @RequiredArgsConstructor public class OrderApiC.. BackEnd/JPA 2022. 4. 22. [JPA] 지연 로딩과 조회 성능 최적화 - 2 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 간단한 주문 조회 V3: 엔티티를 DTO로 변환 - 페치 조인 최적화 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번시간에는 Join Fetch를 이용하여 성능 개선을 이루어 낼 것 이다! 우선 V3의 메서드는 다음과 같다. @GetMapping("/api/v3/simple-orders") public List ordersV3() { List orders = orderRepository.findAllWithMemberDelivery(); return orders.stream() .map(SimpleOrderDto::new) .collect(Coll.. BackEnd/JPA 2022. 4. 20. 이전 1 2 3 다음