Spring Data JPA37 [Spring Data JPA] JPA 마무리 및 나머지기능 01. Specification(명세)스프링 데이터 JPA에서 Specification은 DB 쿼리의 조건을 Spec으로 작성하여 Repository Method에 적용하거나 몇 가지 Spec을 조합해 사용할 수 있게 도와준다.01-1. 명세 기능 사용 방법public interface MemberRepository extends JpaRepository, MemberRepositoryCustom, JpaSpecificationExecutor { // 이 부분 추가 //...}Repository에 JpaSpecificationExecutor 인터페이스 추가 상속웬만하면 Specification은 실무에서의 사용은 지양하는게 좋다고 한다package stu.. 2023. 4. 25. [Spring Data JPA] JPA 도메인클래스 컨버터와 페이징 처리 01. Web 확장 - 도메인 클래스 컨버터HTTP 파라미터로 넘어온 엔티티의 아이디로 엔티티를 찾아서 바인딩해주는 기술.01-1. 도메인 클래스 컨버터 사용 전@RestController@RequiredArgsConstructorpublic class MemberController { private final MemberRepository memberRepository; @PostConstruct public void init() { memberRepository.save(new Member("userA")); } // AS-IS @GetMapping("/members/{id}") public String findMember(@PathVariable(".. 2023. 4. 25. [Spring Data JPA] JPA 사용자정의 리포지토리와 Auditing 01. 사용자 정의 리포지토리 구현스프링 데이터 JPA 리포지토리는 인터페이스로만 정의하고 구현체는 스프링이 자동 생성스프링 데이터 JPA가 제공하는 인터페이스를 직접 구현하면 구현해야 하는 기능이 너무 많음만약 다양한 이유로 인터페이스의 메서드를 직접 구현하고 싶다면?JPA 직접 사용스프링 JDBC Template 사용Mybatis 사용데이터베이스 커넥션 직접 사용 등등..Querydsl 사용package org.springframework.data.jpa.repository;import java.util.List;import javax.persistence.EntityManager;import org.springframework.data.domain.Example;import org.springfra.. 2023. 4. 25. [Spring Data JPA] JPA 벌크성수정쿼리와 EntityGraph 01. 벌크성 수정 쿼리JPA는 기본적으로 Entity를 가져와서 해당 엔티티를 변경하면 트랜잭션 커밋 시점에 Update 쿼리가 DB에 날라간다. 하지만 이러한 부분은 단건의 경우만 해당이 되는 부분인데 단건이 아닌 여러건의 데이터를 한 번에 넣는 경우를 벌크성 수정 쿼리라 한다.01-1. 순수 JPA 기반 Bulk Update 구현@Repositorypublic class MemberJpaRepository { @PersistenceContext private EntityManager em; public int bulkAgePlust(int age) { return em.createQuery("update Member m set m.age = m.age + 1 where .. 2023. 4. 25. [Spring Data JPA] JPA 쿼리메서드 기능 01. 쿼리 메서드 기능이전 장에서 말했던 것처럼 도메인에 특화된 메서드는 어떻게 할지에 대해 의문을 가졌다. 이번에는 이러한 메서드를 처리하기 위해 제공이 되는 기능을 살펴보자.01-1. 쿼리 메서드 기능 3가지메서드 이름으로 쿼리 생성메서드 이름으로 JPA NamedQuery 호출@Query 어노테이션을 사용해서 리파지토리 인터페이스에 쿼리 직접 질의01-2. 메서드 이름으로 쿼리 생성메서드 이름을 분석해서 JPQL 쿼리 실행이름과 나이를 기준으로 회원을 조회하려면?public class MemberJpaRepository { @PersistenceContext private EntityManager em; //..중략 // 순수 JPA로 query method를 짜야 한다면 .. 2023. 4. 25. [Spring Data JPA] JPA 예제도메인모델과 공통인터페이스 기능 01. 예제 도메인 모델과 동작 확인스프링 데이터 JPA는 기본적으로 JPA를 사용하기 위한 프레임워크라 생각 하면 된다. 이번 시간에는 간단한 Member(N), Team(1) 도메인 모델을 설계하는 시간을 가져보자.01-1. Member 엔티티 수정// AS-IS : 엔티티 변경 전@Entity@Getter @Setterpublic class Member { @Id @GeneratedValue private Long id; private String userName; protected Member() { } public Member(String userName) { this.userName = userName; }}id, userName 필드를 .. 2023. 4. 25. [Spring Data JPA] Spring Data JPA의 소개 01. 스프링 데이터 JPA 소개스프링 데이터 JPA란 스프링 프레임워크와 JPA 기반 위에서 JPA를 더욱 편리하게 사용하기 위한 기술.01-1. 스프링 데이터 JPA의 장점Repository에 구현 클래스 없이 Interface만으로 개발이 가능기본적인 CRUD 기능을 JPA가 모두 제공반복적인 작업을 줄여 핵심 비즈니스 로직에 집중 가능02. 프로젝트 생성02-1. 사용 기능version: spring boot 2.7.0groupId: studyartifactid: data-jpalibwebjpah2lombok02-1. 프로젝트 생성 후 간단 테스트@RestControllerpublic class TestController { @GetMapping("/test") public String.. 2023. 4. 25. [Spring Data JPA] JPA 패치조인 마무리 ⚡ 01. 페치 조인의 특징과 한계01-1. 페치 조인 대상에 별칭 사용?// MemberList as m 10";페치 조인 대상에는 별칭을 줄 수 없으며, 주면 안된다.Hibernate는 가능하지만 가급적이면 사용을 지양해야 한다.팀을 조회하는데 3명의 맴버만 따로 조회해서 조작한다는 것 자체가 위험한 행위.객체 그래프라는 것은 데이터를 전부 다 조회 하는 것을 의미한다. 여기서 데이터를 전부 조회 하는 것이 아닌 데이터를 걸러서 조회하는 것이 좋아 보일 수도 있다. 예를 들자면 100건의 데이터를 조회 한다고 했을 때 팀과 연관된 맴버를 위에서(row 기준) 5개만 가져오고 싶다고 가정하자. 하지만 이러한 상황에서는 Team을 조회해서 데이터를 뽑아야 하는것이 아니라, Member 자체를 조회해서 .. 2023. 4. 25. [Spring Data JPA] JPA 페치조인 기본 ⚡ JPQL fetch joinfetch join은 실무에서 상당히 중요한 부분이다.01. 페치 조인(fetch join)우선 페치 조인은 SQL의 조인 종류가 아니다. JPQL에서 성능 최적화를 위해 제공하는 기능으로써 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하기 위해 사용이 되는 기능이다.join fetch 명령어 사용페치 조인 ::=[LEFT [OUTER] | INNSERT] JOIN FETCH 조인 경로02. 엔티티 페치 조인회원을 조회하면서 연관된 팀도 함께 조회(SQL 한 번에)아래 SQL을 보면 회원 뿐만 아니라 팀(T.*)도 함께 SELECT 한다.즉시 로딩을 사용하여 데이터를 가져오는 상황과 동일한 상황이다.-- JPQLselect m from Member m join fetc.. 2023. 4. 25. [Spring Data JPA] JPA 경로표현식 ⚡ 01. JPQL 경로 표현식01-1 경로 표현식select m.username -- 상태 필드from Member m join m.team t -- 단일 값 연관 필드 join m.orders o -- 컬렉션 값 연관 필드where t.name = '팀A'경로 표현식이란 .(점)을 찍어 탐색하는 것을 의미한다. 우선 위 SQL을 보는 것만으로는 이해가 쉽게 되지 않으니 다음 경로 표현식 용어 정리를 살펴보자.상태 필드단일 값 연관 필드컬렉션 값 연관 필드01-2. 경로 표현식 용어 정리// Entity : Member// target : 단일 값 연관 필드@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "TEAM_ID")pri.. 2023. 4. 25. [Spring Data JPA] JPA 서브쿼리와 JPQL 타입표현식 기타식 ⚡ 01. 서브 쿼리(Sub Query)쿼리 안에 또 다른 쿼리를 작성하는 것01-1. 나이가 평균보다 많은 회원select m from Member mwhere m.age > (select avg(m2.age) from Member m2)01-2. 한 건이라도 주문한 회원select m from Member mwhere (select count(o) from Order o where m = o.member) > 001-3. 서브쿼리 지원 함수EXISTS가 IN에 비해 성능 면에서 뛰어나다. EXISTS : 메인 쿼리 -> 서브쿼리 연산 IN : 서브쿼리 -> 메인 쿼리 연산[NOT] EXISTS (subquery) : 서브쿼리에 결과가 존재하면 참(true){ALL | ANY | SOME} (subqu.. 2023. 4. 25. [Spring Data JPA] JPA 프로젝션과 페이징 그리고 조인 ⚡ 01. 프로젝션RDBMS의 SQL은 기본적으로 스칼라 타입 데이터만 가져온다. 하지만 JPA에서는 아래와 같이 엔티티, 임베디드 타입, 스칼라 타입 중 하나의 타입을 가져올 수 있다.SELECT m FROM Member -- 엔티티 프로젝션SELECT m.team FROM Membmer m --엔티티 프로젝션SELECT m.address FROM Member m -- 임베디드 타입 프로젝션 (값 타입)SELECT m.username, m.age FROM Member m -- 스칼라 타입 프로젝션SELECT 절에 조회할 대상을 지정하는 것프로젝션 대상엔티티(Entity)임베디드 타입스칼라 타입(숫자, 문자등 기본 데이터 타입)DISTINCT로 중복 제거✅ 01-1. 프로젝션 - 여러 값 조회Query.. 2023. 4. 25. 이전 1 2 3 4 다음