Spring Data JPA가 지원하는 querydsl
Spring Data JPA가 지원하는 querydsl 정리
Spring Data JPA가 지원하는 querydsl 정리
SQL function은 Dialect에 등록된 function만 호출할 수 있다.
querydsl Spring Data Paging 활용 정리
Spring Data JPA 사용하기 Repository interface를 생성하고 JpaRepository<Entity, ID>를 상속받는다. Spring data JPA는 이전의 포스트에서 손수 구현한 기능들을 기본적으로 제공한다. 순수...
querydsl 순수 JPA와 querydsl
QuerydslConfig.java ~~~ @Configuration public class QuerydslConfig {
동적 쿼리를 해결하는 방식은 두가지가 있다. BooleanBuilder Where 다중 파라미터 사용
Bulk 연산이란 쿼리 한번으로 대량의 데이터를 처리하는 방법
Projection select절에 어떤 데이터를 가져올지 대상을 지정하는 것. 대상이 하나인 경우 해당 타입으로 지정할 수 있다. 대상이 여러개인 경우 Tuple이나 DTO로 받아야 한다.
상수 사용 Expressions.constant() 사용
서브쿼리 com.querydsl.jpa.JPAExpressions 사용
Case 조건에 따른 값을 지정해주는 문법 select, where, order by 절에서 사용 가능
기본 조인 Join의 기본 문법은 join(조인 대상, 조인에 사용할 Q타입의 별칭(alias)) 이다. List<Member> teamA = queryFactory .selectFrom(member) .join(member...
Spring Data JPA는 Querydsl에 몇가지 간편한 기능을 제공한다. 이 기능들은 코드 몇줄을 통하여 편하게 사용할 수 있지만 하나의 테이블을 이용한 쿼리에서 사용해야 정상동작을 기대할 수 있다는 제약이 있다. 여러 테이블을 조인해야 하는 경우 기능이 정상 동작하지 않을...
집합 함수 JPQL이 지원하는 집합 함수를 제공 count() : 조회 데이터의 수 sum() : 조회 데이터 컬럼의 합 avg() : 조회 데이터 컬럼의 평균 max() : 조회 데이터 컬럼의 최대값 min() : 조회 데이터 컬럼의 최소값
정렬 orderBy() : order by 쿼리를 발생시킨다. asc() : 오른차순 desc() : 내림차순 nullsLast() : 해당 필드 값이 null 이라면 조건의 마지막으로 가져온다. ...
페이징 offset() 앞에 스킵할 row의 수 0부터 시작한다. ex) 1이라면 1개를 스킵한 것. limit() 최대로 가져올 row의 수 전체 조회수를 구하고 싶은 경우 ...
결과 조회 fetch() : 리스트 조회, 결과값 없는 경우 빈 리스트를 리턴. fetchOne() : 단 건 조회 결과 없는 경우 : null 결과가 2개 이상인 경우 : NonUniqueResultException fet...
기본 검색 쿼리 검색 조건은 .and()와 .or()를 메서드 체인으로 연결할 수 있다. select(entity).from(entity)은 selectFrom()으로 합칠 수 있다. JPQL이 제공하는 모든 검색 조건을 제공한다. - querydsl 자체가 JPQL의...
테스트할 Entity 앞으로 querydsl 게스글에 나올 Entity는 아래와 같다.
Back-end 개발을 할 경우 Spring boot, JPA, Spring data jpa를 대체로 많이 사용한다. 하지만 이 기술 조합으로 해결하지 못하는 한계가 발생하기 마련인데, 이는 복잡한 쿼리와 동적 쿼리 문제다. 실무에서는 특히 복잡한 쿼리를 많이 사용하고, 검색...
쿼리 메소드(CREATE, USE_DECLARED_QUERY)로 해결할 수 없는 경우 직접 코딩으로써 구현 custom 리포지토리 인터페이스 정의 custom repsitory interface에 기능 추가 만약 spring data기 지원하는 기능의 성능이 마음에 들...
쿼리 메소드(CREATE, USE_DECLARED_QUERY)로 해결할 수 없는 경우 직접 코딩으로써 구현 custom 리포지토리 인터페이스 정의 custom 리포지토리 인터페이스에 새로운 기능 추가 만약 spring data기 지원하는 기능의 성능이 마음에 들지 않은...
스프링 데이터 저장소의 쿼리 만드는 방법 메소드의 이름을 분석하여 쿼리를 생성(CREATE) 미리 정의해 둔 쿼리 찾아 사용(USE_DECLARED_QUERY) JPA의 구현체마다 구현이나 동작하는 방식이 다르지만 spring-data-jpa가 기본적...
spring data 2.0부터 java 8의 Optional을 지원한다. Optional<Entity> findById(Long id); 되도록이면 단일 값을 가져와야 하는 경우 Entity타입이 아닌 Optional<Entity> 값으로 가져오면 ...
JpaRepository에 정의된 메소드를 전부 가져오는 것이 아닌 사용할 기능을 직접 정의하고 싶을때는 아래와 같이 할 수 있다.
JpaRepository JpaRepository는 PagingAndSortingRepository에서 JPA와 관련된 기능을 확장한 interface로, spring data jpa가 제공해준다. PagingAndSortingRepository부터 그 상위의 CrudRe...
spring data는 하나의 프로젝트가 아니고 여러 SQL & NOSQL 저장소 지원 프로젝트의 묶음이다. spring data JPA spring data JDBC spring data KeyValue spring data MongoDB spring ...
JPA 소개 및 원리 대하여 공부한 내용을 기술합니다.
JPA Query 대하여 공부한 내용을 기술합니다.
JPA Fetch에 대하여 공부한 내용을 기술합니다.
JPA Cascade에 대하여 공부한 내용을 기술합니다.
관계형 DB와 Java에 대하여 공부한 내용을 기술합니다.
Object-Relation Mapping
ORM 패러다임 불일치에 대하여
JPA 관계 Mapping에 대하여 공부한 내용을 기술합니다.
JPA Value 타입 맵핑에 대하여 기술합니다.
JPA 엔터티 타입 맵핑에 대하여 기술합니다.
JPA 초기 설정한 것에 대하여 기술합니다.
Spring Bean Scope에 대하여 공부한 내용을 기술합니다.
Dependency Lookup에 대하여 공부한 내용을 기술합니다.
Spring Bean LifeCycle에 대하여 공부한 내용을 기술합니다.
Transaction Isolation에 대하여 공부한 내용을 정리합니다
Spring proxy 호출 위치와 @Transactional
이번 포스트는 업무 중 builder 어노테이션에 대하여 알게된 것이 있어 정리하고자 작성하겠습니다.
Hikari 옵션에 대하여 정리.
Retention Policy에 대하여 공부한 내용을 기술합니다.
Qualifier와 @RequiredArgsConstructor
DTO와 VO에 대하여 공부한 내용을 기술합니다.
@WebMvcTest에 대하여 공부한 내용을 기술합니다.
Spring Boot Test에 대하여 공부한 내용을 기술합니다.
Dependency Injection에 대하여 공부한 내용을 기술합니다.
Maven과 Gradle에 대하여 공부한 내용을 기술합니다.
@DataJpaTest에 대하여 공부한 내용을 기술합니다.
예외 처리에 관하여
JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.
변수의 초기화에 대하여 공부한 내용을 기술합니다.
생성자(Constructor)에 대하여 공부한 내용을 기술합니다.
오버로딩(Overloading)에 대하여 공부한 내용을 기술합니다.
클래스 멤버와 인스턴스 멤버간의 참조와 호출에 대하여 공부한 내용을 기술합니다.
기본형 매개변수와 참조형 매개변수에 대하여 공부한 내용을 기술합니다.
클래스 메서드(static method)와 인스턴스 메서드에 대하여 공부한 내용을 기술합니다.
Private Constructor에 대하여 공부한 내용을 기술합니다.
변수를 비공개로 하는 이유 변수를 private로 선언하는 이유는 남들이 변수에 의존하게 만들고 싶지 않기 때문이다. 즉, 변수의 타입이나 구현을 마음대로 바꾸게 하기 위함이다.
코딩을 함에 있어 네이밍은 상당히 중요하다. 이에 더해 코드의 형식을 맞추는 것도 상당히 중요한데, 형식을 잘 맞춘 코드는 그 퀄리티가 더욱 높아 보이게 만들어주며 그렇지 않은 코드는 무성의해 보이게 만든다. 팀 내의 컨벤션, 사내 컨벤션을 준수하는 것이 얼마나 중요한 것인지 이번...
그동안 개발을 진행하며 내가 짠 코드가 다른 사람에게 더 쉽게 읽히기 바라는 마음으로 주석을 달곤 했다. 하지만 이 책을 읽으며 그것은 괜한 고민이며, 간결한 로직과 분명한 네이밍으로 보완할 수 있음을 알게되었다. 다음은 클린 코드 4장을 정리한 내용이다.
작게 만들어라 저자의 경험으로 많게는 3000줄에서 적게는 20~30줄 정도의 함수를 만들었다고 하는데 작을수록 좋다고 확신한다고 한다. 필자 또한 함수가 길어지면 길어질수록 가독성이 떨어지고 기능적으로 한가지 기능이 아닌 여러 기능을 수행하고 있다고 생각하기에 이는 리팩...
의도를 분명하게 지어라 시간이 오래걸리더라도 좋은 이름을 짓는 것이 중요하다. 의미 없는 이름으로 변수, 함수, 클래스 이름을 짓는다면 아주 간단한 코드라도 코드를 읽는 사람을 힘들게 한다.
깨끗한코드
이번 포스트는 Controller에서 api 응답을 Entity로 하는 경우에 맞닥뜨린 이슈를 공유하며, 어떤 방법이 적절한가에 대한 생각을 정리하기 위해 작성하였습니다. 개인적 견해가 많이 포함되어 잘못되었을 수 있으니 다른 의견을 갖고 계시다면 댓글로 달아주시면 감사드리겠습니다.
최근 JPA에 대하여 공부를 할 때 DB 벤더를 MySQL로 설정할 경우 기본 키 생성 전략이 IDENTITY, Postgresql은 SEQUENCE라고 학습하였다.
이번 포스트에서는 JPA를 사용할 떄 문제가 될 수 있는 N+1 쿼리 문제에 대하여 정리해보겠습니다.
JPA에서 컬렉션 패치 조인을 하는 경우 리스트가 중복되어 나오는 문제가 있다. 아래의 예시를 보자.
JPA와 생성자가 필요한 이유
Junit5에 대하여 공부한 내용을 기술합니다.
Junit5 조건에 따른 실행에 대하여 공부한 내용을 기술합니다.
Junit5 Assertion에 대하여 공부한 내용을 기술합니다.
HATEOAS에 대하여
REST API에 대하여
HTTP와 URL에 대하여
MySQL 정규표현식을 대하여 설명합니다.
export 와 import 에 관하여 공부한 것을 기록합니다.
First story of React.
템플릿 메소드 패턴이란?
Open Session In View에 대하여 공부한 내용을 기술합니다.