[Advanced-4] QueryDSL(3): 실무 활용 패턴
·
Spring/JPA
1. 순수 JPA와 QueryDSL 통합1.1. 순수 JPA 리포지토리 QueryDSL 통합순수 JPA 리포지토리에 QueryDSL을 통합하는 방식은 다음과 같다.package study.querydsl.repository;import com.querydsl.jpa.impl.JPAQueryFactory;import org.springframework.stereotype.Repository;import study.querydsl.entity.Member;import javax.persistence.EntityManager;import java.util.List;import java.util.Optional;import static study.querydsl.entity.QMember.member;@Repo..
[Advanced-3] QueryDSL(2): 문법
·
Spring/JPA
1. 시작 - JPQL vs QueryDSL1.1. QueryDSL 설정 - Bean 등록 (⭐⭐)실무에서는 JPAQueryFactory를 매번 수동으로 생성하지 않고, 스프링 컨테이너에 빈으로 등록하여 필요한 곳에서 주입받아 사용한다. 이는 코드의 중복을 줄이고 일관된 설정을 유지하게 한다.@Configurationpublic class QuerydslConfig { @PersistenceContext private EntityManager em; /** * JPAQueryFactory를 빈으로 등록한다. * 이를 통해 Repository나 Service에서 @RequiredArgsConstructor 등으로 주입받아 사용할 수 있다. */ @Bean p..
[Advanced-2] QueryDSL(1): 기본
·
Spring/JPA
1. 프로젝트 생성 및 의존성 설정 (build.gradle)QueryDSL은 Java에서 타입 안전한 SQL 쿼리를 작성하게 해주는 프레임워크이다. 특히 Spring Boot 3.x 환경에서는 javax가 jakarta로 변경됨에 따라 관련 설정에 유의해야 한다.1.1. 프로젝트 기본 환경Java: 17 이상Spring Boot: 3.2.0 이상Build Tool: Gradle - Groovy주요 의존성: Spring Data JPA, H2 Database, Lombok, QueryDSL (Jakarta 대응 버전)1.2. build.gradle 핵심 설정dependencies { implementation 'org.springframework.boot:spring-boot-starter-data..
[Advanced-1] Spring Data Jpa
·
Spring/JPA
1. 예제 도메인 모델1.1. 엔티티 설계Member 엔티티package study.datajpa.entity;import jakarta.persistence.*;import lombok.*;@Entity@Getter @Setter@NoArgsConstructor(access = AccessLevel.PROTECTED)@ToString(of = {"id", "username", "age"})public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String username; private int age; @ManyToOne(fetch = FetchType.LA..
[Basic-9] 객체지향 쿼리 언어(JPQL)
·
Spring/JPA
1. 객체지향 쿼리 언어 소개1.1. JPA의 다양한 쿼리 방법JPA는 여러 가지 쿼리 방법을 제공하여 다양한 상황에 대응할 수 있도록 설계되었다:// 1. JPQL (Java Persistence Query Language)String jpql = "SELECT m FROM Member m WHERE m.age > 20";List result = em.createQuery(jpql, Member.class).getResultList();// 2. Criteria API (타입 안전 쿼리)CriteriaBuilder cb = em.getCriteriaBuilder();CriteriaQuery cq = cb.createQuery(Member.class);Root m = cq.from(Member.class..
[Basic-8] 값 타입
·
Spring/JPA
1. 기본값 타입1.1. JPA 데이터 타입 분류JPA의 데이터 타입은 크게 엔티티 타입과 값 타입으로 구분된다. 구분 엔티티 타입 값 타입 정의@Entity로 정의하는 객체단순 값으로 사용하는 타입식별자식별자 존재식별자 없음생명주기독립적 관리엔티티에 의존적변경 추적가능불가능공유가능불가능 (복사 사용)예시Member, OrderString name, int age1.2. 값 타입 분류값 타입은 세 가지로 세분화된다:기본값 타입자바 기본 타입: int, double, boolean래퍼 클래스: Integer, Long, DoubleString임베디드 타입 (복합 값 타입)사용자 정의 값 타입@Embeddable로 정의컬렉션 값 타입값 타입을 컬렉션으로 사용@ElementCollection으로 정의1.3..
[Basic-7] 프록시와 연관관계 관리
·
Spring/JPA
1. 프록시1.1. 프록시의 필요성문제 상황: Member를 조회할 때 항상 Team도 함께 조회해야 할까?// 케이스 1: 회원과 팀 정보를 함께 사용하는 경우public void printUserAndTeam(String memberId) { Member member = em.find(Member.class, memberId); Team team = member.getTeam(); System.out.println("회원 이름: " + member.getUsername()); System.out.println("소속팀: " + team.getName()); // Team 정보 필요}// 케이스 2: 회원 정보만 사용하는 경우public void printUser(String m..
[Basic-6] 고급 관계 매핑
·
Spring/JPA
1. 상속 관계 매핑1.1. 관계형 데이터베이스와 객체의 상속 차이관계형 데이터베이스는 상속이라는 개념이 존재하지 않는다. 대신 데이터베이스 설계에서 슈퍼타입-서브타입 모델링이라는 기법이 객체의 상속과 유사한 역할을 한다.객체의 상속// 객체의 상속 구조class Item { private Long id; private String name; private int price;}class Album extends Item { private String artist; private String etc;}class Book extends Item { private String author; private String isbn;}class Movie extends Item ..