일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Greedy
- 자바
- spring
- AOP
- Exception
- db
- Android
- pointcut
- JPQL
- QueryDSL
- Servlet
- java
- 백준
- 알고리즘
- 김영한
- transaction
- SpringBoot
- Thymeleaf
- 스프링 핵심 기능
- springdatajpa
- jpa
- Proxy
- JDBC
- http
- 그리디
- 인프런
- kotlin
- 스프링
- Spring Boot
- 스프링 핵심 원리
- Today
- Total
목록인프런/[인프런] Springboot와 JPA활용 2 (16)
개발자되기 프로젝트
Querydsl - Unified Queries for JavaUnified Queries for Java. Querydsl is compact, safe and easy to learn. querydsl.com -->1. QeryDSL?JPQL을 자바 코드로 작성하게 도와줌. 2. build.gradle QueryDsl을 사용하려면 Q파일이 필요 라이브러리 추가. //querydsl 추가 implementation 'com.querydsl:querydsl-jpa' //querydsl 추가 implementation 'com.querydsl:querydsl-apt'plugin 추가.apply plugin: 'io.spring.depe..
스픅링 데이터 JPA는 JPA를 사용할 때 지루하게 반복하는 코드를 자동화 해줌. 기존에 만든 라이브러리를 SPRING DATA JPA로 바꿔보자 ㅋㅋㅋㅋㅋ JpaRepository에 들어가보면 웬만한 것은 다 만들어놨다. 사용하면됨 ㅋㅋㅋ 어? 구현체는? 알아서 만들어줌.. ㅗㅜㅑ @NoRepositoryBean public interface JpaRepository extends PagingAndSortingRepository, QueryByExampleExecutor { @Override List findAll(); @Override List findAll(Sort sort); @Override List findAllById(Iterable ids); @Override List saveAll(Ite..
Open Session In View : Hibernate Open EntityManager In View : JPA (관례적으로.. osiv라 함.) 1. OSIV on spring.jpa.open-in-view : true기본값 따라서 spring 실행하면 아래와 같은 주의를 볼 수 있음. 2021-08-25 22:21:56.054 WARN 18844 --- [ restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configur..
1. 엔티티 조회 엔티티를 조회해서 그대로 반환 엔티티 조회 후 DTO로 변환 fetch join으로 쿼리 수 최적화 컬레견 페이징과 한계 돌파 컬렉션은 페티 조인시 페이징이 불가능!!!! ToOne 관계는 페치 조인으로 쿼리 수 최적화하자 data row에 영향을 안줌 컬렉션은 페치 조인 대신에 지연로딩 유지하고, hibernate.default_batch_fetch_size, @BatchSize 2. DTO 직접 조회 JPA에서 DTO를 직접 조회 컬렉션 조회 최적화 - 일대다 관계인 컬렉션은 in절을 통해서 메모리에 미리 조회하여 최적화 플랫 테이터 최적화 - join 결과를 그대로 조회 후 애플리케이션에서 원하는 모양으로 직접 변환 3. 권장 순서 엔티티 조회 방식으로 우선 접근 페치 조인으로 쿼..
다 조인시켜서 한방쿼리로 가져오자. 1. OrderFlatDto Order와 OrderItem을 join해서 DTO로 한번에 가져올 예정. DB에서 join하면 한줄로 쭉 join 되듯이 데이터 구조를 맞춤. @Data public class OrderFlatDto { //order private Long orderId; private String name; private LocalDateTime orderDate; private OrderStatus orderStatus; private Address address; //orderItem private String itemName; private int orderPrice; private int count; public OrderFlatDto(Long ..
1. 최적화 public List findAllByDto_optimization() { List result = findOrders(); List orderIds = toOrderIds(result); Map orderItemMap = findOrderItemMap(orderIds); //메모리에 map을 올려놓고 찾아서 꽂아넣기. result.forEach(o -> o.setOrderItems(orderItemMap.get(o.getOrderId()))); return result; } private List toOrderIds(List result) { List orderIds = result.stream().map(o -> o.getOrderId()) .collect(Collectors.toList..
1. DTO를 직접 가져오기 위해 DTO 및 repository생성. @Data public class OrderQueryDto { private Long orderId; private String name; private LocalDateTime orderDate; private OrderStatus orderStatus; private Address address; private List orderItems; public OrderQueryDto(Long orderId, String name, LocalDateTime orderDate, OrderStatus orderStatus, Address address) { this.orderId = orderId; this.name = name; this.o..
1. 페이징 한계 컬렉션을 페치 조인하면 페이징이 불가능함 컬렉션을 페이 조인하면 일대다 조인이 발생하여 데이트가 예측할 수 없이 증가한다. 일대다에서 "일"을 기준으로 페이징을 하는 것이 목적인데 DATA는 "다"를 기준으로 DB에서 row가 생성된다.. 즉 Order 기준으로 페이징을 하고싶지만.. "다"인 OrderItem을 조인하면 "다"가 기준임.. 이 경우에 페이징을 시도하면 데이터를 싹 메모리에 올려서 페이징을 시도한다. ㅎㅎㅎㅎㅎ심각하다. 2. hibernate.default_batch_fetch_size, @BatchSize 그러면, 페이징 + 컬렉션 엔티티 함께 조회하고 싶으면 어떻게 해야함.. xToOne 관계를 모두 fetch join함. ToOne관계를 row수를 증가시키지 않아 ..