본문 바로가기

개발/BACK

[JAVA] Mysql GROUP_CONCAT 데이터 int 타입으로 변경하기

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