티스토리 뷰
2019/03/05 - [Programming/JOOQ] - [JOOQ-04] 좀 더 복잡한 질의 실행해보기
JOOQ 에서는 앞선 예제에서와 같이 Record3 와 같은 Record 을 제공해줍니다. 결과가 3 개일 때에는 Record3, 4 개일 때에는 Record4 을 이용해서 결과를 fetch() 을 통해서 받을 수 있습니다. 하지만, 많이 사용되는 MyBatis 에서도 HashMap 이나 POJO(VO, DTO 등) 형태로 결과를 저장하는게 일반적으로, JPA 에서도 @Entity 로 선언된 POJO 에 바로 결과를 저장하는 것이 일반적입니다. 내부적으로는 Reflection 을 이용하겠죠.
당연히 JOOQ 에서도 POJO 에 바로 저장할 수 있는 기능을 제공합니다.
먼저 앞선 예제의 질의를 그대로 사용한다는 가정 하에 Record3<String, String, Integer> 대신에 저장될 DTO 을 하나 만듭니다. 코드의 축약을 위해 Lombok 을 이용합니다.
package com.zepinos.blog.jooq.dto; import lombok.Data; @Data public class NameCountDto { private String firstName; private String lastName; private int count; }
그리고 기존 소스의 Dao 을 아래와 같이 수정합니다.
package com.zepinos.blog.jooq.dao; import com.zepinos.blog.jooq.dto.NameCountDto; import org.jooq.DSLContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; import java.util.List; import static com.zepinos.blog.jooq.generated.tables.Author.AUTHOR; import static com.zepinos.blog.jooq.generated.tables.Book.BOOK; import static com.zepinos.blog.jooq.generated.tables.Language.LANGUAGE; import static org.jooq.impl.DSL.count; @Repository public class JooqBoardDao { private final DSLContext create; private final JdbcTemplate jdbcTemplate; @Autowired public JooqBoardDao(DSLContext create, JdbcTemplate jdbcTemplate) { this.create = create; this.jdbcTemplate = jdbcTemplate; } public List<NameCountDto> list() { List<NameCountDto> nameCountDtoList = create .select(AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME, count().as("count")) .from(AUTHOR) .join(BOOK) .on(AUTHOR.ID.eq(BOOK.AUTHOR_ID)) .join(LANGUAGE) .on(BOOK.LANGUAGE_ID.eq(LANGUAGE.ID)) .where(LANGUAGE.CD.eq("en").and(BOOK.PUBLISHED_IN.gt(1946))) .groupBy(AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME) .having(count().gt(0)) .orderBy(AUTHOR.LAST_NAME.asc()) .limit(1) .offset(0) .fetchInto(NameCountDto.class); return nameCountDtoList; } }
이전보다 코드가 매우 간결해졌음을 알 수 있습니다. fetch() 대신에 fetchInfo() 을 이용해 저장될 POJO class 을 지정하면 됩니다.
물론 위 예제에서 return 되는 형태도 변경되기 때문에 Service 파일도 형태를 바꿔줘야 합니다. 하지만, 실행 결과는 동일함을 확인할 수 있습니다.
2019/03/22 - [Programming/JQuery] - [JOOQ-06] 올바른 질의를 작성하게 도와주는 방법
'Programming > JOOQ' 카테고리의 다른 글
[JOOQ-07] CTE 구현 방법 (0) | 2019.03.27 |
---|---|
[JOOQ-06] 올바른 질의를 작성하게 도와주는 방법 (0) | 2019.03.22 |
[JOOQ-04] 좀 더 복잡한 질의 실행해보기 (0) | 2019.03.05 |
[JOOQ-03] 테스트 DB 을 생성하고 JOOQ 객체 생성하기 (0) | 2019.03.05 |
[JOOQ-02] JOOQ 에 대해서 좀 더 알아보기 (0) | 2019.03.01 |
- Total
- Today
- Yesterday
- boot
- 엘지
- 시니어 프로그래머
- KDE
- Spring MVC
- java config
- RestTemplate
- OracleJDK
- 페이징
- couchbase
- SI
- 프로젝트 규모
- Spring
- proxmox
- Nas
- docker
- 내장 WAS
- 워드프레스
- Phabricator
- manjaro
- paging
- Redmine
- messages.properties
- NoSQL
- git
- 도입기
- Spring Boot
- jooq
- 클라우드플레어
- 외장 WAS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |