JPA 썸네일형 리스트형 사용자 정의 리포지토리 구성 및 페이징처리 사용자 정의 리포지토리 사용법은 아래와 같다. 1. 사용자 정의 인터페이스 작성 2. 사용자 정의 인터페이스 구현 3. 스프링 데이터 리포지토리에 사용자 정의 인터페이스 상속 1. 사용자 정의 인터페이스 작성 package study.querydsl.repository; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import study.querydsl.dto.MemberSearchCondition; import study.querydsl.dto.MemberTeamDto; import study.querydsl.entity.Member; import java.util.List; pu.. 더보기 API 개발 고급 - 컬렉션 조회 최적화 정리 실전! 스프링부트와 JPA활용2 1. 엔티티 조회방식으로 우선 접근 A. 페치조인으로 쿼리수를 최적화 B. 컬렉션 최적화 i. 페이징필요 (hibernate.default_batch_fetch_size, @BatchSize 로 최적화 ii.페이징필요 x -> 페치조인사용 2. 엔티티조회방식으로 해결이 안되면 DTO조회방식사용 i. ToOne 관계에서는 V4를 사용하고 ii. ToMany관계에서는 V5를 사용하여 IN절을 활용해서 메모리에 미리조회해서 최적화를 시킨다. 3. DTO조회방식으로 해결이 안되면 NativeSQL or JdbcTemplate 참고: 엔티티 조회 방식은 페치 조인이나, hibernate.default_batch_fetch_size, @BatchSize 같이 코드를 거의 수정하지 않.. 더보기 API 개발 고급 - 컬렉션 조회 최적화 주문내역에서 추가로 주문한 상품정보를 추가로 조회해보자. Order을 기준으로 컬렉션인 OrderItem와 Item이 필요로합니다. 조회 성능최적화에서는 OneToOne ,ManyToOny관계만 있었다. 이번에는 컬렉션인일대다 관계(OneToMany)를 조회하고 최적화 하는 방법을 알아보겠습니다. 주문 조회 V1: 엔티티 직접 노출 package jpabook.jpashop.api; import jpabook.jpashop.domain.Order; import jpabook.jpashop.domain.OrderItem; import jpabook.jpashop.repository.OrderRepository; import jpabook.jpashop.repository.OrderSearch; import.. 더보기 API 개발 기본 API 개발 기본 회원 등록 API 회원 등록 API - V1 package jpabook.jpashop.api; import jpabook.jpashop.domain.Member; import jpabook.jpashop.service.MemberService; import lombok.Data; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import j.. 더보기 Mysql 과 JpaData를 활용하여 만든 BoardService 1. build gradle plugins { id 'java' id 'org.springframework.boot' version '2.7.7' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-v.. 더보기 ModelMapper 사용 법 compile group: 'org.modelmapper', name: 'modelmapper', version: '2.3.5' ModelMapper 빈 등록 @Configuration public class AppConfig { @Bean public ModelMapper modelMapper(){ return new ModelMapper(); } } ModelMapper 자동 매핑 private final BoardRepository boardRepository; public List getBoardList(){ return boardRepository.findAll() .stream() .map(board->modelMapper.map(board,BoardDto.class)) .collect(Col.. 더보기 Entity 올바른 수정은 무엇인가 ? 변경 감지(Dirty Checking 방식) 스프링에서 EntityManger의 주요 기능 중 하나로 Dirty Check가 있다. EntityManger는 현재 트랜잭션에서 영속성 컨텍스트에 포함되어 있는 Entity객체에 수정이 발생할 경우, 트랜잭션이 커밋되는 시점에 내부적으로 UPDATE 쿼리를 생성하여 전달한다. 기본적으로 EntityManager의 find()나 createQuery() 메서드를 통해 조회는 Entity 객체는 영속성 컨텍스트에 포함된다. 따라서, persist() 메서드를 명시적으로 호출하지 않아도 된다. 그러나, EntityManager는 준영속 상태(Detached)의 Entity에 대해서는 Dirty Check를 수행하지 않는다. 만약, 사용자가 폼 정보를 기반으로 새로.. 더보기 JPA 올바른 Entity 생성 @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Member { @Id @Column(name = "id", nullable = false) @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; private String picture; @Enumerated(EnumType.STRING)// Enum타입 객체를 쓸때 활용! 반드시 String타입으로 바꿔주고 DB 필드에 널어주어야 한다! private Role role; public Member update(Stri.. 더보기 이전 1 2 3 다음