728x90
마이바티스 환경에서 데이터를 GROUP_CONCAT을 사용하여 조회하면
데이터는 문자열 (String) 형태로 데이터를 받게 된다
해당 데이터를 형 변환하는 방법이다
해당 예제에서는 team_id를 기준으로 팀에 속해있는 사용자 번호를 GROUP_CONCAT하여 조회하는 데이터다.
먼저 데이터베이스를 조회하는 쿼리이다.
SELECT team_id, team_name, GROUP_CONCAT(user_id) AS "userArr"
FROM tb_student
GROUP BY team_id;
위와 같이 데이터를 조회하게 되면,
team_id | team_name | userArr |
1 | 청팀 | 1,2,3,4,5 |
2 | 백팀 | 6,7,8,9,10 |
이런 식으로 데이터가 조회된다.
마지막 컬럼은 user_id 데이터가 모여있는 데이터다
해당 컬럼의 데이터 타입은 String으로 받게 되면 된다
이런 식으로 각 팀별로 데이터를 가져왔을 때,
Service 레이어에서 userArr을 int형으로 변경해서 List에 넣어보자
List<Map<String,Object>> list = teamDao.findList();
List<Integer> blue_list = new ArrayList<>();
List<Integer> white_list = new ArrayList<>();
// list 내부 데이터에 접근하기 위한 for 문
for(Map<String,Object> result : list){
// team_id가 1이면 청, 2면 백팀
int team_id = Integer.parseInt(result.get("team_id"));
if(team_id == 1){
String[] team_blue = String.valueOf(result.get("userArr").split(","));
for(String a : team_blue) {
blue_list.add(Integer.parseInt(a));
}
}else{
String[] team_white = String.valueOf(result.get("userArr").split(","));
for(String a : team_white) {
white_list.add(Integer.parseInt(a));
}
}
}
|
cs |
위와 같이, userArr 컬럼을 String 배열에 담기 위해선 먼저
result.get("userArr").split(",") 문구 처럼 "," 단위로 문자를 자르고, 해당 데이터를
String.valueOf로 문자형으로 형변환을 시켜준다
String.valueOf로 데이터를 변경해주기 전의 데이터 형은 Object다
해당 데이터를 또 다시 Int 형의 데이터가 담기는 List로 변경해주기 위해선,
아까 String 배열에 담았던 데이터를 다시 Integer 형으로 변경하여 리스트에 add 해주면 된다
728x90
'개발 > BACK' 카테고리의 다른 글
[Mysql] 특정 컬럼으로 정렬 후, 조회 데이터 ROW에 인덱스 추가하기 (0) | 2022.08.19 |
---|---|
[Mysql] 날짜 차이 계산하기 (0) | 2022.08.19 |
[SpringFramework] 마이바티스 환경에서 INSERT,UPDATE 무시하기 (0) | 2022.08.15 |
[Mysql] limit 페이징에서 쿼리 조회 건 수 구하기 SQL_CALC_FOUND_ROWS (0) | 2022.06.15 |
[Ubuntu] 서버 Tomcat 꺼지면 재시작하는 스크립트 작성하기 (0) | 2022.05.23 |