일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JPA
- TCP/IP
- 친절한 SQL 튜닝
- 컬렉션 조회 최적화
- @MappedSuperclass
- index
- SQL 튜닝
- 서브쿼리
- fetch join
- 스프링
- DTO
- 데이터베이스
- querydsl
- 스프링 데이터 JPA
- 성능최적화
- INDEX SCAN
- 값 타입
- JPQL
- 엔티티
- 자바의 정석
- 정렬
- SQL
- 오라클
- Spring
- Spring data JPA
- 데이터모델링
- 페이징
- 페치조인
- 그룹함수
- 스프링 컨테이너
- Today
- Total
목록Spring data JPA (13)
nu_s
이번 글에 나오는 기능들은 실무에서 잘 쓰지 않으니 참고만 하자 1. Specifications (명세) 스프링 데이터 JPA는 JPA Criteria를 활용해서 이 개념을 사용할 수 있게 지원한다. 술어(predicate) 참 또는 거짓으로 평가 AND, OR 같은 연산자로 조합해서 다양한 검색 조건을 쉽게 생성(컴포지트 패턴) Ex) 검색 조건 하나하나 스프링 데이터 JPA는 org.springframework.data.jpa.domian.Specification 클래스로 정의 명세 기능을 사용하려면 JpaSpecificationExecutor 인터페이스를 상속하면 된다. public interface MemberRepository extends JpaRepository, JpaSpecificatio..

스프링 데이터 JPA 구현체 분석 스프링 데이터 JPA가 제공하는 공통 인터페이스 구현체가 있다. org.springframework.data.jpa.repository.support.SimpleJpaRepository SimpleJpaRepository @Repository @Transactional(readOnly = true) public class SimpleJpaRepository implements JpaRepositoryImplementation { @Transactional public S save(S entity) { if (entityInformation.isNew(entity) { em.persist(entity); return entity; } else { return em.merg..

페이징과 정렬 예제 @GetMapping("/members") public Page list(Pageable pageable) { Page page = memberRepository.findAll(pageable); return page; } // 테스트용 데이터 @PostConstruct public void init() { for (int i = 0; i < 100; i++) { memberRepository.save(new Member("user"+i, i)); } } 파라미터로 Pageable을 받을 수 있다. Pageable은 인터페이스이다. 실제로는 org.springframework.data.domain.PageRequest 객체를 생성한다. 요청 파라미터 page : 현재 페이지, 0부터 ..
도메인 클래스 컨버터 HTTP 파라미터로 넘어온 엔티티의 아이디로 엔티티 객체를 찾아서 바인딩 도메인 클래스 컨버터 사용 전 @RestController @RequiredArgsConstructor public class MemberController { private final MemberRepository memberRepository; @GetMapping("/members/{id}") public String findMember(@PathVariable("id") Long id) { Member member = memberRepository.findById(id).get(); return member.getUsername(); } // 테스트용 데이터 @PostConstruct public voi..
Auditing 일반적으로 엔티티에는 공통적으로 들어가야하는 속성들이 있다. 등록일 수정일 등록자 수정자 아래 링크를 참고하자 https://khw4465.tistory.com/93 [JPA] 공통 매핑 정보 (@MappedSuperclass) 🐶 @MappedSuperclass란? 공통 매핑 정보가 필요할 때 사용하는 어노테이션 모든 곳에 공통으로 들어가야하는 컬럼이 있다면? 각각의 클래스에 하나하나 입력하는 것은 중복이 발생하고 비효율적이다. E khw4465.tistory.com 순수 JPA 사용 @MappedSuperclass @Getter public class JpaBaseEntity { @Column(updatable = false) private LocalDateTime createDate..
사용자 정의 Repository 스프링 데이터 JPA에서 제공하는 JpaRepository 인터페이스는 스프링이 구현체를 자동으로 생성해준다. 스프링 데이터 JPA가 제공하는 인터페이스를 직접 구현하면 구현해야 할 메서드들이 너무 많다. 다양한 이유로 인터페이스를 직접 구현하고 싶을 때 사용 JPA 직접 사용(EntityManager) 스프링 JDBC Template 사용 MyBatis 사용 데이터베이스 커넥션 직접 사용 Querydsl 사용 구현하는 방법 public interface MemberRepositoryCustom { List findMemberCustom(); } @RequiredArgsConstructor public class MemberRepositoryImpl implements M..

1. JPA Hint JPA 쿼리 힌트이다. (JPA 구현체에게 제공하는 힌트, SQL 힌트 X) 기본적으로 JPA를 이용해 데이터를 조회하게되면 영속성 컨텍스트에 의해 관리된다. 만약 값을 수정한 뒤 flush()하거나 변경 감지가 발생하면 업데이트 쿼리도 발생하게 된다. 이때 Hint를 사용하여 조회 용도(ReadOnly)로만 사용할 수 있다. 변경 감지에 드는 모든 비용을 사전에 차단해 성능을 최적화 할 수 있다. public interface MemberRepository extends JpaRepository { @QueryHints(value = @QueryHint(name = "org.hibernate.readOnly", value = "true")) Member findReadOnlyByU..
지연로딩 & 페치조인 이전에 JPA를 배울 때 부터 지연로딩은 항상 강조되었다. 그로 인해 발생하는 N + 1 문제를 해결하기 위해 페치 조인이라는 것을 사용해왔다. 그렇다면 스프링 데이터 JPA에서는 이 문제를 어떻게 해결할까? 바로 @EntityGraph를 사용하는 것이다. @Test public void findMemberLazy() { Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); teamRepository.save(teamA); teamRepository.save(teamB); Member member1 = new Member("member1", 10, teamA); Member member2 = new Member("membe..