일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- mybatis
- gitlab runner
- 도커
- 12865
- CI/CD
- 나무 조경
- aws ecs
- docker
- 여러 개
- aws ecr
- resultMap
- nginx
- 2449
- aws credentials
- spring boot
- softeer
- 코딩테스트
- 자바
- 백준
- checked exception
- unchecked exception
- dfs
- 소프티어
- 너비우선탐색
- phi squared
- AWS
- 나무섭지
- Java
- Spirng Boot
- DP
- Today
- Total
성장하는 개발자의 블로그
[Spring Boot] - mybatis 사용하여 한 번에 여러 select 가져오기 본문
import lombok.Data;
import java.util.List;
@Data
public class CustomGroup {
private int groupSeq;
private String title;
private int groupType;
private int subType;
}
mybatis 를 이용하여 프로젝트 구성 중 한 번에 여러 select 문을 가져와야하는 경우가 생겼다. 물론 여러 mapper 메소드를 이용하여 할 수 있었지만 이렇게 구성해야하는 이유가 있었다. 이유를 나열해보자면,
1. 통계 데이터를 위한 임시테이블 활용으로 임시테이블에서 여러 개의 select 문 필요
2. 한 트랜잭션 내에서 데이터베이스 왕복 횟수를 줄이기 위함
3. 이에 따른 네트워크 비용 감소
이러한 이유로 한 프로시저에서 여러 select 를 가져오는 방법을 찾게 됐다. 이 글을 보는 사람들은 자신의 프로젝트에 맞는 방법을 적용하기를 바란다.
한 번에 여러 select 를 처리하기 위해서는 저번 resultmap 활용 법 글과 비슷한 방식으로 구성하였다.
https://zxzc1297.tistory.com/4
[Spring Boot] MyBatis ResultMap 활용하기
mybatis 를 사용하여 개발 도중 단순한 select 해서 나온 결과가 json안의 json 형태의 데이터로 나와야하는 경우가 있었다. 단순하게 말하자면 join을 하여 select한 결과가 그룹 1, 그룹 2 등으로 나누어
zxzc1297.tistory.com
이전 resultmap 활용법
우선 이번에도 기본적인 모델들을 만들어 주었다. 실제 프로젝트에서는 7개의 모델로 8개의 select 를 만들었지만 예시에서는 2개의 모델만을 가지고 2개의 select 를 가져오는 상황을 예시로 정하고 이전 글의 예시를 가져다 쓰기로 정했다.
첫 번째 모델
import lombok.Data;
import java.util.List;
@Data
public class CustomGroup {
private int groupSeq;
private String title;
private int groupType;
private int subType;
}
두 번째 모델
import lombok.Data;
@Data
public class GroupItems {
private String itemSeq;
private String itemType;
private String itemName;
}
이후 mapper 인터페이스 에서는 어노테이션을 통한 resultmap 설정을 해줬다.
@ResultMap("groupInfo, itemInfo")
List<List<?>> testMultiSelect(Map<String, Object> data);
mapper.xml 파일
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.mapper.main.GroupMapper">
<resultMap id="itemResultMap" type="com.test.model.main.GroupItems">
<result property="itemSeq" column="itemSeq"/>
<result property="itemType" column="itemType"/>
<result property="itemName" column="itemName"/>
</resultMap>
<resultMap id="groupInfo" type="com.test.model.main.CustomGroup">
<result property="groupSeq" column="groupSeq"/>
<result property="title" column="title"/>
<result property="groupType" column="groupType"/>
<result property="subType" column="subType"/>
</resultMap>
<select id="testMultiSelect" statementType="CALLABLE" resultMap="groupInfo, itemInfo">
<![CDATA[
call UP_ITEM_LIST_TEST_R ()
]]>
</select>
</mapper>
이러한 방식으로 구성하였다.
이 방식에서 주의할점은 프로시저 내의 select 순서가 resultmap의 나열 순서와 같아야한다.
이후 가져온 데이터는 list로 가져왔기 때문에 순서대로 맞게 가공하여 화면단에 뿌려주었다.
List<List<?>> result = testService.testMultiSelect();
// 첫번째
List<CustomGroup> groupInfo = (List<CustomGroup>) result.get(0);
// 두번째
List<GroupItems> itemInfo = (List<GroupItems>) result.get(1);
여러 select를 가져오는 방법은 생각보다 간단하였고 예시로는 2개를 하였지만 실제로는 더 많은 select도 가능하다. 자신의 상황에 맞게 코드를 수정하여 사용하길 바란다.
'Spring Boot' 카테고리의 다른 글
[Spring Boot] MyBatis ResultMap 활용하기 (0) | 2024.07.16 |
---|