전체 글 123

QueryDSL 동적 쿼리 및 Bulk 연산

지난 포스팅에서는 QueryDSL의 Projection에 대해 알아보았습니다. 이번 포스팅은 동적 쿼리를 BooleanBuilder 사용과 Where 다중 파라미터 사용방법에 대해 알아보고 이어서 다중 업데이트 및 삭제를 위한 벌크 연산에 대해 알아보려고 합니다😊 개요 이전 포스팅에서 사용했던 엔티티들을 재사용할 예정입니다. 혹여 엔티티 클래스의 코드가 궁금하신 분들은 엔티티 설계 포스팅을 참고해주세요😄 📌 저는 BeforeEach 어노테이션을 활용해 가 데이터가 들어간 상황에서 테스트를 진행한 것입니다. @BeforeEach public void before() { queryFactory = new JPAQueryFactory(em); Team teamA = new Team("teamA"); Team ..

JPA 2022.11.15

QueryDSL Projection 결과 반환하는 방법

이전 포스팅에서는 Query DSL을 사용해서 조인하는 방법에 대해 알아보았습니다. 이번 포스팅은 Projection 결과를 반환하는 방법에 대해 알아보려고 합니다. 프로젝션(Projection)은 select 절에서 어떤 칼럼들을 조회할지 대상을 지정하는 것을 말합니다😄 개요 이전 포스팅에서 사용했던 엔티티들을 재사용할 예정입니다. 혹여 엔티티 클래스의 코드가 궁금하신 분들은 엔티티 설계 포스팅을 참고해주세요😄 📌 저는 BeforeEach 어노테이션을 활용해 가데이터가 들어간 상황에서 테스트를 진행한 것입니다. @BeforeEach public void before() { queryFactory = new JPAQueryFactory(em); Team teamA = new Team("teamA"); T..

JPA 2022.11.14

자바 ORM 표준 JPA 프로그래밍 - 고급 매핑

이전 포스팅에서는 JPA의 다양한 연관관계에 대해 알아보았다. 오늘은 상속관계 매핑과 조인 테이블 등 JPA에서 제공하는 고급 매핑에 대해 알아보려고 한다😄 개요 서두와 같이 이번 포스팅에서는 객체의 상속 관계를 데이터베이스에 어떻게 매핑하는지, 등록일·수정일 같이 여러 엔티티에서 공통으로 사용하는 매핑 정보 상속 방법, 연결 테이블을 매핑하는 조인 테이블 등 다양한 고급 매핑에 대해 알아보려고 한다. 상속 관계 매핑📔 관계형 데이터베이스에는 객체지향 언어에서 다루는 상속이라는 개념이 없다. 대신에 위 그림과 같이 슈퍼 타입 서브타입 관계(Super-Type Sub-Type Relationship)라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. 슈퍼 타입 서브타입 논리 모델을 실제 물리 모델인 테..

Book Review 2022.11.06

QueryDSL 조인 사용 방법

이전 포스팅에서는 Query DSL을 사용하여 정렬하는 방법과 페이징 처리 등을 포스팅하였습니다. 오늘은 기본 조인 방법부터 fetch 조인까지 알아보려 합니다😄 개요 이전 포스팅에서 사용했던 엔티티들을 재사용할 예정입니다. 혹여 엔티티 클래스의 코드가 궁금하신 분들은 엔티티 설계 포스팅을 참고해주세요😄 📌 저는 BeforeEach 어노테이션을 활용해 가데이터가 들어간 상황에서 테스트를 진행한 것입니다. @BeforeEach public void before() { queryFactory = new JPAQueryFactory(em); Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); em.persist(teamA); em.persist(t..

JPA 2022.11.01

QueryDSL 정렬과 페이징 처리 및 집합 예시

이전 포스팅에서는 Query DSL을 사용하여 데이터를 조회하는 간단한 예시를 만들었었습니다. 이번 포스팅에서는 조회한 결과물을 정렬하고 페이징 처리하는 방법에 대해 알아볼게요😄 개요 이전 포스팅에서 사용했던 엔티티들을 재사용 할 예정입니다. 혹여 엔티티 클래스의 코드가 궁금하신 분들은 엔티티 설계 포스팅을 참고해주세요😄 📌 저는 BeforeEach 어노테이션을 활용해 가데이터가 들어간 상황에서 테스트를 진행한 것입니다. @BeforeEach public void before() { queryFactory = new JPAQueryFactory(em); Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); em.persist(teamA); em..

JPA 2022.10.31

자바 ORM 표준 JPA 프로그래밍 - 다양한 연관관계

이전 포스팅에서는 연관관계 매핑에 대해 알아보았다. 오늘은 조금 더 깊게 들어가서 JPA가 제공하는 다양한 연관관계에 대해 알아보려고 한다😁 개요 엔티티의 연관관계를 매핑할 때는 다중성, 단방향인지 양방향인지, 연관관계의 주인을 누구로 삼을 것인지에 대해 고려해야 한다. 먼저 연관관계가 있는 두 엔티티가 일대일 관계인지 일대다 관계인지 다중성을 고려해야 한다. 다음으로는 두 엔티티 중 한쪽만 참조하는 단방향 관계인지 서로 참조하는 양방향 관계인지 고려해야 한다. 마지막으로 양방향 관계면 연관관계의 주인을 정해야 한다. 다중성의 종류는 다대일(@ManyToOne), 일대다(@OneToMany), 일대일(@OneToOne), 다대다(@ManyToMany) 매핑이 있다. 만약 다중성을 판단하기 어렵다면 반대 ..

Book Review 2022.10.30

QueryDSL 사용하는 조회 예제

이전 포스팅에서는 QueryDSL을 적용하고 도메인 모델을 살펴본 후 각 엔티티들을 설계하였다. 오늘은 기존 JPQL과의 차이를 살펴보면서 조회하는 예제를 만들어보려 한다. 개요 이전 포스팅에서 도메인 모델과 엔티티 클래스를 설계하였습니다. 해당 엔티티 코드는 이전 포스팅에 있으며, 따라 하지 않는 분들은 흐름만 파악하셔도 충분합니다. Member와 Team은 다대일 양방향 관계로 매핑되어 있습니다😄 예제 코드📔 @SpringBootTest @Transactional public class QuerydslBasicTest { @Autowired EntityManager em; JPAQueryFactory queryFactory; @BeforeEach public void before() { queryFa..

JPA 2022.10.28

QueryDSL 적용 및 예제 시리즈

이번 시리즈는 Query DSL 사용법에 대해 알아보려 합니다. 이전 JPA 시리즈에서는 Spring Data JPA까지만 알아보았는데, Query DSL을 사용하면 조금 더 효율적으로 JPA를 사용할 수 있다😀 개요 Query DSL이란 Query Domain Specific Language 약자로 도메인+특화+언어라는 개념으로, 오픈소스 프로젝트이며 JPQL을 Java 코드로 작성할 수 있도록 하는 라이브러리다. 쉽게 말하면, 기존에 mybatis를 쓰던 JPQL을 쓰든 간에 쿼리를 SQL 문법 규칙대로 쿼리를 작성하지 않고 Java 코드로만 작성할 수 있게 도와주는 라이브러리라고 생각하면 쉬울 것 같다. Criteria 기법을 사용하는 방법도 있지만, 사실상 실무에서 사용하기에는 복잡하고 공부 비용..

JPA 2022.10.27

자바 ORM 표준 JPA 프로그래밍 - 연관관계 매핑

엔티티들은 대부분 다른 엔티티와 연관관계가 있다. 하지만 객체는 참조(주소)를 사용해서 관계를 맺고, 테이블은 외래 키를 사용해서 관계를 맺는다. 이 둘은 완전히 다른 특징을 가진다. 객체 관계 매핑에서 가장 어려운 부분이 바로 객체 연관관계와 테이블 연관관계를 매핑하는 일이다. 개요 이전 포스팅에서는 엔티티 매핑에 대해서만 알아보았고, 이번에는 다양한 연관관계를 간단한 예시와 함께 포스팅하려 한다. 연관관계의 사용부터 관계를 맺었을 때 주인은 누구로 설정해야 하는지, 또 주의할 점과 편리하게 사용하는 방법등을 알아보려 한다. 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계다. 연관관계를 사용하기에 앞서 서두에서 언급한 객체와 테이블의 차이를 알아야 한다. 객체 그림을..

Book Review 2022.10.23

Spring Data JPA Bulk Update & Entity Graph

지난 포스팅에서는 Spring Data JPA를 사용해서 페이징 처리를 손쉽게 구현했어요. 오늘은 벌크 업데이트와 엔티티 그래프에 대해 알아보려 합니다. 개요 Bulk Update는 클라이언트의 요구 조건에 맞는 데이터들을 한번에 변경하는 것을 의미합니다. JPA에서는 변경 감지(더티 체킹)를 해서 데이터를 업데이트하기 때문에, 한 번에 수정하기 위한 쿼리가 필요하고 그 쿼리를 벌크 수정이라고 불러요. Entity Graph는 연관된 엔티티들을 SQL 한번에 조회하는 방법입니다. 사실상 fetch join의 간편 버전이라고 할 수 있어요. 그럼 한번 살펴볼까요? Bulk Update📗 Bulk update의 방법으로는 순수 JPA를 사용하는 방법과 Spring Data JPA의 @Query를 사용하는 방..

JPA 2022.10.14