본문 바로가기

Server Development/Data API

JPA - Query DSL Method

 

 

 

Query DSL의 메서드를 정리해보고자 한다.

Entity Mangager를 사용하기에 메서드가 동일하다

 

 

 

1. Basic Structure

QUser user = QUser.user;

User result = queryFactory

	// Select
    	.select(user)
        .from(user)
        .where(user.userName.eq("name"))
        .fetchOne();
        
        
        // Update
        .update(user)
        .set(user.name, "name_changed")
        .where(user.userName.eq("name"))
        .execute();
        
        
        // Delete
        .delete(user)
        .where(user.userName.eq("name"))
        .execute();

 

- Delete Join은 JPQL, QueryDSL 모두 지원 안함

 

 

2. Basic Methods 

QUser user = QUser.user;

User result = queryFactory
    	.select(user)
        .from(user)
        
        // 값 일치
        .where(user.userName.eq("name"))
        // 값 불일치
        .where(user.userName.ne("name"))
        // Null 여부
        .where(user.userName.isNotNull())
        
        
        
        // 범위 일치
        .where(user.age.in(20, 40))
        // 범위 불일치
        .where(user.age.notIn(20, 40))
        // 범위 일치
        .where(user.age.between(20, 40))
        // >=
        .where(user.age.goe(20))
        // >
        .where(user.age.gt(20))
        // <=
        .where(user.age.loe(20))
        // <
        .where(user.age.lt(20))
        
        
        
        
        // 검색 1
        .where(user.userName.like("name%"))
        .where(user.userName.like("%name%"))
        .where(user.userName.like("%name"))
        // 검색 2
        .where(user.userName.contains("name"))
        .where(user.userName.startsWith("name"))
        
        
        
        
        // And, Or
        where(user.userName.startsWith("name").and(user.age.lt(20)))
        where(user.userName.startsWith("name").or(user.age.lt(20)))
        
        
        
        
        .fetchOne();

 

 

 

3. Result Methods

// 리스트 조회
.fetch()


// 한건 조회
// 결과 없음 : Null
// 결과가 둘이상 : NonUniqueException
.fetchOne() 


// 가장 먼저 등장하는 한건 조회
// + limit(1), fetchOne()
.fetchFirst()


// 건수 조회
// + count
.fetchCount()
-> Deprecated
-> fetch().get(0)
-> count()를 select안에 작성해 같이 사용

 

 

 

4. Sorting 

QUser user = QUser.user;

User result = queryFactory
    	.select(user)
        .from(user)
        .where(user.userName.eq("name"))
        
        // 정렬(내림차순, 오름차순 + age가 Null이면 결과 마지막에 합쳐서 출력)
        .orderBy(user.age.desc(), user.age.asc().nullslast())
        
        
        // 앞에서부터 특정 개수만큼 생략
        .offset(2)
        
        // 조회 개수 제한
        .limit(2)
        
        .fetchOne();

 

 

 

5. Math

// Counting
.select(user.count(),
	// 합
        user.age.sum(),
        // 평균
        user.age.avg(),
        // 최대값
        user.age.max(),
        // 최소값
        user.age.min())

 

 

 

 

6. Left Join

QUser user = QUser.user;

User result = queryFactory
    	.select(store)
        .from(store)
        .leftjoin(store.user, user).on(store.storeName.eq("steakHouse"))
        .where(user.userName.eq("name"))
        .fetch();

 

 

'Server Development > Data API' 카테고리의 다른 글

mappedBy, Cascade  (0) 2023.07.10
JPA - Query DSL  (0) 2023.05.11
JPA - Join  (0) 2023.05.09
Cache - Redis  (0) 2023.04.06
JPA - @Query with Spring JPA  (0) 2023.04.05