이 글은 김영한의 [실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발]을 수강하며 정리한 글입니다.
🟦 기본 환경: IDE: IntelliJ, Language: Java
TypedQuery
: 작성한 JPQL을 실행시키기 위해 만드는 쿼리 객체
* 반환 Type이 확실할 경우 TypedQuery, 불확실할 경우 Query 사용
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
|
public List<Order> findAllByString(OrderSearch orderSearch) {
String jpql = "select o from Order o join o.member m";
boolean isFirstCondition = true;
// 주문 상태 검색
if (orderSearch.getOrderStatus() != null) {
if (isFirstCondition) { // status 추가
jpql += " where";
isFirstCondition = false;
} else {
jpql += " and";
}
jpql += " o.status = :status";
}
TypedQuery<Order> query = em.createQuery(jpql, Order.class)
.setMaxResults(1000);
if (orderSearch.getOrderStatus() != null) {
query = query.setParameter("status", orderSearch.getOrderStatus());
}
return query.getResultList();
}
|
1. createQuery()
: 쿼리 생성
- createQuery(jpql, returnType)
🚨 조회 column이 2개 이상일 경우, 배열로 반환되지만 TypedQuery<Order[]>로 선언하지 않음
→ 쿼리 결과가 Order[]로 지정되는 것이 아니라 개별 Order 엔티티 객체들의 컬렉션 또는 결과 목록으로 반환되기 때문에 TypedQuery<Order>를 유지
2. setMaxResults()
: 조회 결과 수 제한
3. setParameter()
: 위치 또는 이름기준 파라미터 바인딩
- setParameter(바인딩 될 변수, 바인딩 될 값)
cf. 이름 기준 바인딩
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
|
public List<Order> findAllByString(OrderSearch orderSearch) {
String jpql = "select o from Order o join o.member m";
boolean isFirstCondition = true;
// 주문 상태 검색
if (orderSearch.getOrderStatus() != null) {
if (isFirstCondition) { // status 추가
jpql += " where";
isFirstCondition = false;
} else {
jpql += " and";
}
jpql += " o.status = ?1";
}
TypedQuery<Order> query = em.createQuery(jpql, Order.class)
.setMaxResults(1000);
if (orderSearch.getOrderStatus() != null) {
query = query.setParameter(1, orderSearch.getOrderStatus());
}
return query.getResultList();
}
|
: status → ?1
"status" → 1
4. getResultList()
: 결과를 컬렉션(데이터 집합)으로 반환, 없을 경우 빈 컬렉션을 반환하며 1건이라도 1건이 저장된 컬렉션 반환
cf. getSingleResult()
: 결과가 1건일 때 사용하며, 없을 경우-NoResultException, 2건 이상일 경우-NonUniqueResultException 발생
참고 자료
'Java > JPA' 카테고리의 다른 글
[JPA_Basic] JPA persist, find, remove, update (0) | 2023.06.15 |
---|---|
[SpringBoot_JPA_1] @PathVariable (0) | 2023.06.03 |
[SpringBoot_JPA_1] @NoArgsConstructor (1) | 2023.05.30 |
[SpringBoot_JPA_1] @Transactional (0) | 2023.05.29 |
[SpringBoot_JPA_1] Dirty Checking & Merge (0) | 2023.05.28 |