SpEL (Spring Expression Langauge) 이란? 스프링 표현식은 SpEL로 표기하고 객체 그래프를 조회하고 조작하는 기능을 제공합니다. Unified EL과 비슷하지만 메소드 호출과 문자열 템플릿 기능도 제공합니다. 자바에서 사용할 수 있는 표현식은 여러 가지(OGNL: Object Graph Navigation Language, MVEL: MVFlEX Expression Language, JBOss EL)가 있지만 SpEL은 스프링 프로젝트 내에서 사용할 용도로 만든 표현식입니다. 스프링 3 버전부터 지원하고 있습니다. SpEL을 사용하는 스프링 프로젝트 SpEL은 스프링 프로젝트 전반적으로 모두 사용되지만 가장 비중있게 사용하는 부분은 아래와 같습니다. @Value @Comditi..
모든 소스 코드는 여기 있습니다. 스프링 데이터에서 제공하는 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..
소스 코드는 여기 있습니다. 문제는 여기 있습니다. Problem You are given a perfect binary tree where all leaves are on the same level, and every parent has two children. The binary tree has the following definition: struct Node { int val; Node *left; Node *right; Node *next; } Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL. Initially,..
모든 소스 코드는 여기 있습니다. 이전 포스팅에 이어서 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..
- Total
- Today
- Yesterday
- JPA
- Spring Boot Tutorial
- spring boot jwt
- 스프링 데이터 jpa
- 함께 자라기 후기
- Java
- JSON
- 함께 자라기
- Spring Boot JPA
- spring boot app
- proto3
- 스프링 부트 회원 가입
- leetcode
- QueryDSL
- gRPC
- 스프링 부트
- @ManyToOne
- r
- 클린 아키텍처
- Spring Boot
- 알고리즘
- intellij
- 스프링 부트 튜토리얼
- Linux
- Spring Data JPA
- 헥사고날 아키텍처
- Jackson
- 스프링부트
- spring boot application
- 스프링 부트 애플리케이션
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |