본문 바로가기

Spring69

SpringData JPA야, 나는 엔티티 일부만 필요한데? (Projection) 조심하세요! 별(*) 은 점점 커져요! select * 은 날이 갈수록 커집니다. JPARepository 로 find() 또는 findAll() 메소드를 사용할때 Entity 단위로 조회해오고 있죠? 이걸 속칭 ⭐별쿼리라고 합니다. 🚨 이렇게 조회하면 당연히 필드가 많아질수록 느려지겠죠? 🚨 그럼 일부 필드만 조회해서 성능을 최적화 하려면 어떻게 해야할까요? Projection의 기능 원하는 필드만 지정해서 조회 가능 여러필드 합쳐서 재정의 필드(Alias) 조회 가능 (Nested 프로젝션) 조회 필드 그룹을 인터페이스 또는 클래스로 만들어놓고 재사용 가능 Porjection 필드 사용방법 1. get필드() 메소드로 정의 정의한/원하는 필드만 조회하기 때문에 Closed 프로젝션 이라고 한다. 쿼리.. 2024. 3. 6.
SpringData JPA 다이이나믹하게 사용하기 (DynamicInsert, DynamicUpdate) @DynamicInsert 이 어노테이션을 엔티티에 적용하게 되면 Insert 쿼리를 날릴 때 null 인 값은 제외하고 쿼리문이 만들어진다. 장점 더 적은 작업량 + 빠른 속도 필드차이가 1개밖에 안되서 조금 정도밖에 차이가 안나지만 필드가 많아질수록 더 차이가 많이납니다! @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) // jpa @Entity @Table(name = "users") @DynamicInsert public class User { .... } 테스트 @Test void dynamicInsertTest() { // given var newUser = User.builder().username("user").build(); // .. 2024. 3. 6.
JPQL 및 QueryDSL 활용 1. JPQL (Java Persistence Query Language) Table 이 아닌 Entity(객체) 기준으로 작성하는 쿼리를 JPQL 이라고 하며 이를 사용할 수 있도록 EntityManger 또는 @Query 구현체를 통해 JPQL 쿼리를 사용할 수 있다. 1-1. EntityMananger.createQuery() 쿼리 문자열과 Entity 를 직접 넣어서 쿼리를 작성한다. setParameter 와 같이 key, value 문자열을 통해서 쿼리 파라미터를 매핑할 수 있다. 안 좋은 예시 @Test public void testEmCreateQuery() { String qlString = "select u from User u " + "where u.username = :usernam.. 2024. 3. 6.
SpringData JPA 페이징 심화 페이징 레파지토리 JpaRepository 의존성 ListPagingAndSortingRepository PagingAndSortingRepository : 여기에서 페이징 & 소팅 기능을 제공합니다. 이징 처리 프로세스 PageRequest 를 사용하여 Pageable에 페이징 정보를 담아 객체화 한다. Pageable을 JpaRepository가 상속된 인터페이스의 메서드에 T(Entity)와 함꼐 파라미터로 전달한다. 2번의 메서드의 return 으로 Page가 응답 된다. 응답된 Page에 담겨진 Page 정보를 바탕으로 로직을 처리하면 된다. Pageable 요청 : org.springframework.data.domain.Pageable 페이징을 제공하는 중요한 인터페이스이다. PageRequ.. 2024. 3. 5.