스프링 부트 2.6 버전 이상부터 Querydsl 5.0을 기본으로 지원하게 되면서 몇 가지 주의해야할 사항들이 있습니다. PageableExecutionUtils 패키지 변경 먼저 PageableExecutionUtils의 패키지 위치가 변경되었습니다. 기존 위치는 org.springframework.data.repository.support.PageableExecutionUtils였는데 org.springframework.data.support.PageableExecutionUtils로 변경되었습니다. 기존에 사용하고 있었다고 하면 import를 다시 해주셔야 합니다. Querydsl fetchResults(), fetchCount() Deprecated Querydsl의 fetchCount()와 f..
스프링 부트 2.6 미만은 이전 글을 참고해주세요. [Querydsl] 프로젝트 설정 및 테스트 모든 소스 코드는 여기 있습니다. Querydsl 을 사용하기 위해 프로젝트 설정부터 차근차근 달려봅시다! 먼저 자바 버전은 11 , 스프링 버전은 2.5.2 를 선택하였고 gradle 프로젝트로 생성하여 아래 네 jaime-note.tistory.com 최근에 스프링 부트 프로젝트를 생성하여 이전 글 처럼 querydsl을 설정하다보면 정상 동작하지 않습니다. 따라서 build.gradle 파일을 아래 처럼 변경해주어야 합니다. buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'org.springframework.boot' version '2...
이번에 5.0.0 버전이 release 되었는데 어떤 변경사항이 있었는지 살펴보겠습니다. 😀 먼저 가장 큰 변화는 자바 8버전 미만은 이제 지원하지 않는 것 인데요, 자바 7버전 이하를 사용하는 분들은 4.x.x 버전을 계속 사용해야 합니다. 그리고 joda-time과 google의 guava 런타임 dependency를 제외하였습니다. 이번 업데이트는 약 2년만에 이루어진 메이저 업데이트로 그동안 github에 남겨진 이슈 중 비중있는 것들 위주로 처리했다고 합니다. 큼지막 한 것들은 간단히 소개했으니 내부 기능 변화를 자세히 살펴보겠습니다. 새로운 기능들 Java 8 소스 레벨을 대상으로 성능과 코드 개선 Stream를 반환하는 Fetchable#stream() 추가 try-with-resources..
모든 소스 코드는 여기 있습니다. 스프링 데이터에서 제공하는 Querydsl 기능을 소개합니다. Repository 인터페이스 지원: QuerydslPredicateExecutor 공식 문서 참조 스프링 데이터는 QuerydslPredicateExecutor라는 인터페이스를 제공합니다. public interface QuerydslPredicateExecutor { Optional findById(Predicate predicate); // (1) Iterable findAll(Predicate predicate); // (2) long count(Predicate predicate); // (3) boolean exists(Predicate predicate); // (4) // … more funct..
모든 소스 코드는 여기 있습니다. 스프링 데이터 JPA와 Querydsl을 같이 사용하는 방법에 대해서 알아보겠습니다. 사실 이 부분은 스프링 데이터 JPA 관련 포스팅의 복습이라고 보셔도 됩니다. 각 챕터에 앞서 관련 내용을 미리 읽고 오시면 도움이 될 거 같아 링크를 먼저 첨부하겠습니다. 스프링 데이터 JPA - Custom Repository Best Practice 스프링 데이터 JPA - 페이징과 정렬2(API 활용) 그럼 위의 내용을 이미 알고계시다는 전제 하에 시작해보겠습니다! 🏃 사용자 정의 Repository 먼저 PlayerRepository를 생성합니다. package io.lcalmsky.querydsl.repository; import io.lcalmsky.querydsl.dom..
모든 소스 코드는 여기 있습니다. SQL 함수는 Dialect로 등록한 언어에 대해서만 사용할 수 있습니다. 현재 프로젝트에서는 H2 데이터베이스를 사용하므로 H2Dialect에 명시된 함수들만 사용할 수 있습니다. H2Dialect.java /* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or . */ package org.hibernate.dialect; import java.sql.SQLException; import java...
모든 소스 코드는 여기 있습니다. 이번엔 Querydsl을 이용해 벌크 쿼리를 작성해보겠습니다. 벌크 Update 쿼리를 바로 수정하기 전에 Player의 시즌/비시즌 상태를 나타내는 Boolean 타입 변수 inSeason과 주급을 나타내는 Integer 타입 변수 weeklySalary를 추가해보겠습니다. package io.lcalmsky.querydsl.domain; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.ToString; import javax.persistence.*; import java.util.Optional; @Table(name = "Player") @E..
모든 소스 코드는 여기 있습니다. Querydsl을 이용해 동적 쿼리를 작성하는 방법은 두 가지가 있습니다. BooleanBuilder를 사용하는 방법과 where 절에 파라미터를 전달하는 방식이 있는데요, 하나씩 살펴보도록 하겠습니다. BooleanBuilder BooleanBuilder는 Predicate를 구현하는 구현체이고 Predicate는 where절의 파라미터 타입입니다. 따라서 BooleanBuilder를 이용해 조건절을 추가한 뒤 where절에 전달하면되고, 이 부분을 동적으로 구현할 수 있습니다. 현재 Entity는 필드 수가 워낙 적어 경우의 수가 몇 가지 나오지 않으니 한 번 모두 테스트해보도록 하겠습니다. package io.lcalmsky.querydsl.domain; impor..
모든 소스 코드는 여기 있습니다. 이전 포스팅에 이어서 Querydsl의 중급 문법을 소개합니다. Projection 프로젝션(Projection)은 select 절에서 어떤 컬럼들을 조회할지 대상을 지정하는 것을 말합니다. 프로젝션 대상이 하나일 경우는 타입이 명확하기 때문에 해당 Generic Type이 해당 컬럼 타입에 맞게 지정됩니다. 이 부분은 너무 간단하기 때문에 간단한 예제 소스 코드로 설명을 대체하겠습니다. package io.lcalmsky.querydsl.domain; import com.querydsl.jpa.impl.JPAQueryFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; i..
모든 소스 코드는 여기 있습니다. 이전 포스팅에 이어서 Querydsl의 기본 문법을 소개합니다. 서브 쿼리(Sub Query) SQL을 직접 사용하거나 MyBatis 등을 사용하는 레거시에서 많이 볼 수 있는 서브 쿼리는 실제로 join을 사용하거나 쿼리를 나눠서 처리하는 것이 성능상 유리할 때가 있습니다. 하지만 불가피하게 사용해야 할 상황들을 위해 Querydsl에서의 서브 쿼리 사용 방법을 확인해 보겠습니다. 서브 쿼리 사용을 위해선 JPAExpressions를 사용합니다. 먼저 선수들 중 나이가 가장 많은 선수를 서브 쿼리를 이용해 조회해보겠습니다. package io.lcalmsky.querydsl.domain; import com.querydsl.jpa.JPAExpressions; impor..
- Total
- Today
- Yesterday
- Spring Boot JPA
- 함께 자라기 후기
- Java
- gRPC
- 스프링 부트 튜토리얼
- spring boot application
- leetcode
- Spring Boot Tutorial
- 함께 자라기
- 스프링 부트
- 헥사고날 아키텍처
- 스프링 부트 회원 가입
- JPA
- JSON
- @ManyToOne
- 알고리즘
- proto3
- Linux
- spring boot app
- QueryDSL
- Spring Boot
- Spring Data JPA
- 클린 아키텍처
- 스프링 데이터 jpa
- spring boot jwt
- 스프링부트
- 스프링 부트 애플리케이션
- r
- Jackson
- intellij
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |