이번에 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..
모든 소스 코드는 여기 있습니다. 이전 포스팅에 이어서 Querydsl의 기본 문법을 소개합니다. 기본 Join 첫 번 째 파라미터에 join할 대상, 두 번 째 파라미터에 별칭으로 사용할 Q Type을 지정합니다. package io.lcalmsky.querydsl.domain; import com.querydsl.jpa.impl.JPAQueryFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBoot..
모든 소스 코드는 여기 있습니다. 이전 포스팅에 이어서 Querydsl의 기본 문법을 소개합니다. 정렬 JPAQueryFactory에서 orderBy 메서드를 호출해 정렬 기능을 사용합니다. orderBy의 파라미터로 정렬할 항목들을 전달하는데 아래 테스트 코드처럼 작성하면 됩니다. package io.lcalmsky.querydsl.domain; import com.querydsl.jpa.impl.JPAQueryFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.spring..
- Total
- 83,844
- Today
- 64
- Yesterday
- 439
- 스프링 부트 애플리케이션
- Linux
- Spring Data JPA
- JPA
- proto3
- Jackson
- leetcode binary search
- Spring Boot JPA
- @ManyToOne
- spring boot jwt
- 스프링 부트 회원 가입
- intellij
- 스프링 부트
- leetcode stack
- 스프링 부트 튜토리얼
- leetcode bst
- Spring Boot Tutorial
- leetcode
- spring boot app
- r
- spring boot application
- Spring Boot
- 스프링 데이터 jpa
- QueryDSL
- gRPC
- Java
- JSON
- 스프링 부트 jwt
- 스프링부트
- 알고리즘