Java ORM22 [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. [JPA] 지연 로딩과 조회 성능 최적화 - 1 내가 공부한 것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼 겸 상세히 기록하고 얕은 부분들은 가볍게 포스팅하겠습니다. 간단한 주문 조회 V1: 엔티티를 직접 노출 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 우선 다음과 같은 controller가 있다고 해보자. (잘못 만든 컨트롤러이다. 오류 상황을 보이기 위한 목적이다) @RestController @RequiredArgsConstructor public class OrderSimpleApiController { private final OrderRepository orderRepository; @GetMapping("/api/v1/simple-orders") public List ordersV1() { List.. BackEnd/JPA 2022. 4. 19. [JPA] 변경감지와 병합(merge) 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 14. 변경감지와 병합 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 우선 준영속 엔티티에 대하여 알아보자. 준영속 엔티티는 영속성 컨텍스트가 더이상 관리하지 않는 엔티티를 의미한다. 다음 코드를 살펴보자. @PostMapping("/items/{itemId}/edit") public String updateItem(@ModelAttribute("form") BookForm form, @PathVariable String itemId){ Book book = new Book(); book.setId(form.getId()); book.setName(.. BackEnd/JPA 2022. 4. 11. [JPA] 객체지향 쿼리 언어 4 (중급 문법) 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 4. 다형성 쿼리 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 ● TYPE - 조회 대상을 특정 자식으로 한정한다. 예를 들면, Item 중 Book, Movie를 조회해라 와 같은 JPQL은 다음과 같다. //JPQL select i from Item i where type(i) IN(Book, Movie) //SQL select i from Item i where i.DTYPE in('B', 'M'); ● TREAT (JPA2.1) - 자바에서의 다운캐스팅과 유사하다. - 상속 구조에서 부모타입을 특정 자식 타입으로 다루기 위해 사용한다. - FRO.. BackEnd/JPA 2022. 4. 10. [JPA] 객체지향 쿼리 언어 3 (중급 문법) 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 경로 표현식 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 경로 표현식 이란? => .(점) 을 찍어 객체 그래프를 탐색하는 방법을 말한다. select m.username -> 상태 필드 from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드 where t.name ='팀A' ● 경로 표현식 용어 정리 1. 상태 필드 : 단순히 값을 저장하기 위한 필드 (ex. m.username) 2. 연관 필드 : 연관관계를 위한 필드 - 단일 값 연관 필드 : @ManyToOne, @.. BackEnd/JPA 2022. 4. 10. [JPA] 객체지향 쿼리 언어 1 (기본 문법) 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 소개 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 ● JPQL 소개 가장 단순한 조회 방법은 다음과 같다. EntityManager.find() 또는 객체 그래프 탐색을 하면서 조회할수도 있다. => a.getB().getC() 만약 나이가 18살 이상인 회원을 모두 검색하고 싶다면? 특정 조건을 기준으로 검색을 하고싶다면 어떻게 해야할까? ● JPQL 필요성 JPA를 사용하면 엔티티 객체를 중심으로 개발할수 있다. 문제는 검색 쿼리이다! 애당초 모든 DB데이터를 객체로 변환해서 검색하는 것은 불가능하다. 검색을 할 때도 테이블이 아닌 엔티티 객체.. BackEnd/JPA 2022. 4. 8. [JPA] 값 타입 - 2 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 4. 값 타입의 비교 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 인스턴스가 달라도 그 안에 값이 같으면 같은것으로 봐야한다. // primitive type 비교 int a = 10; int b = 10; System.out.println(a == b); // true // 임베디드 타입 비교 Address a = new Address("서울", "test", 7777); Address b = new Address("서울", "test", 7777); System.out.println(a == b); // false 임베디드 타입을 '==' 연산자로 .. BackEnd/JPA 2022. 4. 7. [JPA] 값 타입 - 1 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 기본값 타입 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 JPA의 데이터 타입은 크게 2가지로 분류 가능하다. (엔티티 타입, 값 타입) 1. 엔티티 타입 - @Entity로 정의하는 객체이다. - 데이터가 변해도 식별자로 지속적인 추적이 가능하다. => 예를 들어 회원 엔티티의 키나 나이값 을 변경해도 식별자로 인식 가능하다. 2. 값 타입 - int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 - 식별자가 없고 값만 있으므로 변경시 추적 불가 => 예를 들어 숫자 100을 200으로 변경하면 완전히 다른 값.. BackEnd/JPA 2022. 4. 7. [JPA] 영속성 전이와 고아 객체 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 영속성 전이 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속상태로 만들고 싶다면? 예를 들어 부모 엔티티를 저장하면 자식 엔티티도 함께 저장되도록 말이다! 우선 영속성 전이가 안되는 기본적인 엔티티의 저장방법부터 알아보자. - parent, child // parent @Entity public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent") priva.. BackEnd/JPA 2022. 4. 6. [JPA] 프록시와 연관관계 관리 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 프록시 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 한가지 의문을 가져보자. Team이라는 필드를 갖고있는 Member를 조회할때 Team도 한번에 함께 조회되어야 할까? 예를 들어 다음과 같은 코드가 있다고 해보자. Member member = entityManager.find(Member.class, 1L); System.out.println("username = " + member.getUsername()); Team team = member.getTeam(); System.out.println("Team = " + team.getName().. BackEnd/JPA 2022. 4. 6. 이전 1 2 다음