일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- AOP
- java
- 자바
- transaction
- SpringBoot
- db
- JDBC
- Thymeleaf
- 스프링
- 그리디
- 스프링 핵심 원리
- Servlet
- spring
- 김영한
- 백준
- QueryDSL
- springdatajpa
- jpa
- Greedy
- pointcut
- Proxy
- 스프링 핵심 기능
- Android
- JPQL
- http
- Exception
- kotlin
- Spring Boot
- 알고리즘
- 인프런
- Today
- Total
목록인프런/[인프런] Springboot와 JPA활용 2 (16)
개발자되기 프로젝트
1. fetch join fetch join을 적용해서 일대다 조회를 해보자. public List findAllWithItem(){ List resultList = em.createQuery("select o from Order o " + "join fetch o.member m " + "join fetch o.delivery d " + "join fetch o.orderItems oi " + "join fetch oi.item i", Order.class).getResultList(); return resultList; } 현재 db에 order는 2개, orderItem은 4개 가 있다. 일대다 관계이기 때문에 DB입장에서 ORDER,와 ORDER_ITEM을 JOIN하면 ORDER의 DATA가 불어..
컬렉션인 일대다 관계를 조회하고, 최적화하자. 일대다 조회는 DB입장에서 data가 뻥튀기 된다. 예를들어 하나의 주문(orderA)에 item( #1, #2, #3)이 3개라면 data는 1개가 아니라 3개가 된다. orderA - #1, orderA - #2, orderA-#3 1. 엔티티 직접 노출 : V1 get을 통해 member, orderItem, Delivery 프록시를 강제로 초기화 시킨다. @RestController @RequiredArgsConstructor public class OrderApiController { private final OrderRepository orderRepository; @GetMapping("/api/v1/orders") public List orde..
1. Controller @GetMapping("/api/v4/simple-orders") public List ordersV4(){ return orderRepository.findOrderDtos(); } 2. Repository JPA에서 DTO를 바로 조히하는 방법 new 명령어를 사용해서 JPQL결과를 DTO로 즉시 변환. Query안에 DTO를 생성하여 값을 직접 넣어줌. public List findOrderDtos() { return em.createQuery( "select new springjpa2.repository.OrderSimpleQueryDto(o.id, m.name, o.orderDate, o.status, d.address) " + "from Order o " + "join..
FETCH JOIN 실무에서 저어어어어어어어ㅓ엉어어어엉말 중요함. 1. fetch join SQL 조인의 종류가 아님 JPQL에서 성능 최적화를 위해 제공하는 기능 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능임. j bsh-developer.tistory.com Fetch Join2 1. 페치 조인의 특징과 한계 페시 조인 대상에는 별칭을 줄 수 없다. 하이버네이트는 가능, 하지만 가급적 사용하지 말자. fetch join은 나랑 연관된 엔티티를 전부 다 가져옴. 따라서 fetch join에 별 bsh-developer.tistory.com 1. Fetch Join을 활용 public List findAllWithMemberDelivery() { return em.createQuery("..
1. DTO 로 변환해서 리턴. @GetMapping("/api/v2/simple-orders") public List odersV2(){ List orders = orderRepository.findAllByString(new OrderSearch()); List result = orders.stream() .map(o -> new SimPleOrderDto(o)) //map은 a를 b로 바꾸는 것. .collect(Collectors.toList()); return result; } @Data private class SimPleOrderDto { private Long orderId; private String name; private LocalDateTime orderDate; private Or..
주문, 배송정보, 회원을 조회하는 api를 만들자 지연로딩 때문에 발생하는 "성능"문제를 단계적으로 해결!!!!! 1. 주문조회 : 엔티티를 직접 노출, X To One 성능 최적화 /** * 연관관계(x to One) * Order-> Member (N:1) * Order -> Delivery (1:1) */ @RestController @RequiredArgsConstructor public class OrderSimpleApiController { private final OrderRepository orderRepository; @GetMapping("/api/v1/simple-orders") public ListordersV1(){ List all = orderRepository.findAllB..
1. 조회용 샘플 데이터 입력 매번 애플리케이션 실행할때 마다 별도로 데이터 입력하기 귀찮으니 매 실행시 자동으로 데이터가 DB에등록되도록 코드를 구성해보자. InitDb클래스 생성 @Component 적용하여 컴포넌트 스캔의 대상으로 지정함 내부 메서드 init() 작성 및 @PostConstruct로 지정하여 빈 생성 이후에 실행되도록 지정 내부 클래스인 InitService를 만들어서 @Conponent, @Transctional적용 실질적인 db에 접근하는 코드 모아놓음. @Component @RequiredArgsConstructor public class InitDb { private final InitService initService; @PostConstruct //스프링 빈 생성 후 실행..
* @RestController = @Controller + @ReponseBody * @RequestBody : JSON 데이터를 Member로 바꿔줌. 1.회원 등록 : 엔티티를 @RequestBody에 직접 매핑 api에서 엔티티를 직접 사용하면 여러 문제점이 있다 엔티티에 프레젠테이션 계층을 위한 로직이 추가됨 엔티티에 API검증을 위한 로직이 들어감.(@NotEmpty 등) 엔티티가 변경되면 API스펙이 변한다. ㅜㅜ @PostMapping("/api/v1/members") public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member){ Long id = memberService.join(member); return new..