JPA/실전! 스프링 데이터 JPA

    6. 나머지 기능들

    나머지 기능들이라고 한 이유는 복잡도에 비해 실무에서 사용되기 애매하기 때문이다. 그리고 Specifications, Query By Example은 실무에서 거의 사용되지 않고 QueryDSL로 대체되기 때문에 가볍게 읽고 넘어가자. Specifications (명세) 책 도메인 주도 설계(Domain Driven Design)는 SPECIFICATION(명세)라는 개념을 소개 스프링 데이터 JPA는 JPA Criteria를 활용해서 이 개념을 사용할 수 있도록 지원 그러나 JPA Criteria는 가독성 및 사용법에 있어서 너무 극악이기 때문에 가볍게 읽고 넘어가자. 술어(predicate) 참 또는 거짓으로 평가 AND OR 같은 연산자로 조합해서 다양한 검색조건을 쉽게 생성(컴포지트 패턴) 예) ..

    5. 스프링 데이터 JPA 구현체 분석

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

    4. 확장 기능

    사용자 정의 리포지토리 구현 스프링 데이터 JPA 리포지토리는 인터페이스만 정의하고 구현체는 스프링이 자동 생성해준다. 그렇다고 스프링 데이터 JPA가 제공하는 인터페이스를 모두 구현하는 것은 불가능에 가깝다. 다양한 이유로 인터페이스의 메서드를 직접 구현하고 싶다면 어떻게 해야할까? JPA 직접 사용( EntityManager ) 스프링 JDBC Template 사용 MyBatis 사용 데이터베이스 커넥션 직접 사용 등등... Querydsl 사용 사용자 정의 인터페이스 public interface MemberRepositoryCustom { List findMemberCustom(); } 사용자 정의 인터페이스 구현 클래스 @RequiredArgsConstructor public class Memb..

    3. 쿼리 메소드 기능

    스프링 데이터 JPA가 다음과 같은 기능들을 제공한다. 쿼리 메소드 기능 3가지 메소드 이름으로 쿼리 생성 메소드 이름으로 JPA NamedQuery 호출 @Query 어노테이션을 사용해서 리파지토리 인터페이스에 쿼리 직접 정의 메소드 이름으로 쿼리 생성 스프링 데이터 JPA는 메소드 이름을 분석해서 JPQL을 생성하고 실행 이름과 나이를 기준으로 회원을 조회하려면? 순수 JPA 리포지토리 public List findByUsernameAndAgeGreaterThan(String username, int age) { return em.createQuery("select m from Member m where m.username = :username and m.age > :age", Member.class..

    2. 공통 인터페이스 기능

    순수 JPA 기반 리포지토리 만들기 우선 순수한 JPA기반 리포지토리를 만들어 보자 기본 CRUD 1. Create(저장) public Member save(Member member) { em.persist(member); return member; } 2. Update(변경 → 변경감지 사용) JPA에서 수정은 변경감지 기능을 사용하면 된다. 트랜잭션 안에서 엔티티를 조회한 다음에 데이터를 변경하면, 트랜잭션 종료 시점에 변경감지 기능이 작동 해서 변경된 엔티티를 감지하고 UPDATE SQL을 실행한다. 3. Delete(삭제) public void delete(Member member) { em.remove(member); } 4. Read(조회) public Member find(Long id) {..

    1. 프로젝트 환경설정 & 예제 도메인 모델

    프로젝트 생성 Spring boot IntelliJ-ultimate 버전이 아니라면 스프링 부트 스타터를 이용 (https://start.spring.io/) 사용 기능(라이브러리); web, jpa, h2, lombk SpringBootVersion: 2.7.15 groupId: study artifactId: data-jpa Gradle config code plugins { id 'java' id 'org.springframework.boot' version '2.7.15' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'study' version = '0.0.1-SNAPSHOT' java { sourceCompati..