일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 인프런
- Exception
- 자바
- JDBC
- db
- spring
- pointcut
- 스프링
- QueryDSL
- Thymeleaf
- springdatajpa
- Servlet
- 김영한
- 백준
- SpringBoot
- transaction
- AOP
- Spring Boot
- Android
- kotlin
- 그리디
- Proxy
- 알고리즘
- JPQL
- 스프링 핵심 기능
- java
- jpa
- 스프링 핵심 원리
- Greedy
- http
- Today
- Total
목록jpa (149)
개발자되기 프로젝트
컬렉션인 일대다 관계를 조회하고, 최적화하자. 일대다 조회는 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. 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..
* @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..
1. 엔티티 직접 사용 - 기본 키 값 JPQL에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티의 기본 키 값을 사용함! 엔티티는 DB에서 구분되는 기준이 기본 키임. 따라서 엔티티를 넘겨도 PK를 사용함. JPQL select count(m.id) from Member m //엔티티의 아이디를 사용 select count(m) from Member m //엔티티를 직접 사용 SQL : 위 JPQL 둘다 아래와 같이 동일한 SQL 실행. select count(m.id) as cnt from Member m 엔티티를 파라미터로 전달하는 경우 String jpql = “select m from Member m where m = :member”; List resultList = em.createQuery(..
다형성을 활용하는 경우 JPA가 특정 기능을 제공 1. TYPE 조회 대상을 특정 자식으로 한정 예를들어 Item중에서 Book, Movie를 조회해 JPQL select i from Item i where type(i) IN(Book, Movie) SQL select i from i where i.DTYPE in ('B','M') 2. TREAT(JPA2.1) 자바의 타입 캐스팅과 유사 상속 구조에서 부모 타입을 특정 자식 타입으로 다룰 때 사용 FROM, WHERE, SELECT(하이버네이트지원) 사용 예) 부모인 Item과 자식 Book이 있다. JPQL select i from Item i where treat(i as Book).auther = ‘kim’ SQL select i.* from It..
1. 페치 조인의 특징과 한계 페시 조인 대상에는 별칭을 줄 수 없다. 하이버네이트는 가능, 하지만 가급적 사용하지 말자. fetch join은 나랑 연관된 엔티티를 전부 다 가져옴. 따라서 fetch join에 별칭을 적용하여 탐색 시, 일부만 불러오게 됨. 예를들어 원래 t.members하면 5명이 나와야 하는데 fetch join에 별칭 적용하여 조건을 추가하여 3개가 나왔다고하자. 그러면 이 시점 이후에 t.members를 하면 5명이 아닌 3명만 조회된다. 하지만 JPA 기본 설계는 t.members하면 멤버 전체를 갈 수 있어야 한다. (객체 그래프는 기본적으로 전부 조회할 수 있어야 함) 둘 이상의 컬렉션은 페치 조인할 수 없다.(일 - 다 - 다) 일대다도 데이터 뻥튀기인데 일대다대다는? ..
실무에서 저어어어어어어어ㅓ엉어어어엉말 중요함. 1. fetch join SQL 조인의 종류가 아님 JPQL에서 성능 최적화를 위해 제공하는 기능 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능임. join fetch 명령어 사용 fetch join ::=[LEFT (OUTER) | INNTER] JOIN FETCH 조인경로 쿼리로 내가 원하는 객체 그래프를 어느 시점에 한 번에 조회할 것이라고 정할 수 있는 것. 지연로딩으로 설정해도 fetch join의 우선순위가 높음. 2. Entity fetch join 회원을 조회하면서 연관된 팀도 함께 조회(SQL 한 번에) SQL을 보면 회원 뿐 만 아니라 팀(T.*)도 함께 SELECT JPQL select m from Member m join ..
1.경로 표현식이란? .(점)을 찍어서 객체 그래프를 탐색하는 것. select m.username -> 상태 필드 from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드 where t.name = '팀A' 2. 용어 정리 상태 필드(state field) : 단순히 값을 저장하기 위한 필드 : m.username 연관 필드(association field) : 연관관계를 위한 필드 단일 값 연관 필드 @ManyToOne, @OneToOne, 대상이 엔티티(m.team) 컬렉션 값 연관 필드 @OneToMany, @ManyToMany, 대상이 컬렉션(m.orders) 3. 경로 표현식 특징 상태 필드 : 경로 탑색의 끝임, 더 이..