오늘도 개미는 열심히 일을 하기위해 폭우를 뚫고 출근했다😢
출근하자마자 운영팀쪽에서 DB 데이터 출력 요청이 있었는데
당분간 해당 데이터를 매일 혹은 주 3회 정도 뽑아달라는 요청이였다.
쿼리문이야 간단하고 뽑는거는 어려운 일이 아니였는데 내가 부재시에도 데이터 출력이 필요할수도 있기에
관리자페이지에 해당 데이터 엑셀다운로드 페이지를 추가해주기로 하였다.
출력이 필요한 매장들을 엑셀 업로드 한 후 다운로드 버튼을 누르면 해당 정보들이 출력되게끔 작업 한 뒤
테스트를 하는데 엑셀이 텅텅비어서 다운로드 된다...?😞
[ 엑셀 업로드 부분 일부]
//
if (fileExtend.equals("xlsx")) {
XSSFWorkbook work = new XSSFWorkbook(fis);
int sheetNum = work.getNumberOfSheets();
for (int loop = 0; loop < sheetNum; loop++) {
XSSFSheet sheet = work.getSheetAt(loop);
int rows = sheet.getLastRowNum();
for (int rownum = 1; rownum < rows + 1; rownum++) {
XSSFRow row = sheet.getRow(rownum);
if (row != null) {
// 조회 대상 코드
XSSFCell cell = cell = row.getCell(0);
String shopCode = CommonUtil.cellValue(cell);
if (!shopCode.equals("")) {
rowcount++;
shopList += "'" + shopCode + "',";
}
}
}
}
}
shopList = shopList.substring(0, shopList.length()-1);
//
엑셀에서 조회 대상 코드들을 추출해 String에 'code1', 'code2', 'code3' ... 형태로 담아 Mybatis를 통해 xml에서 단순하게
[ 쿼리문 일부 ]
--
WHERE
shop_code in (
#{shopCodes}
)
--
이런식으로 사용하려 했는데 정작 로그에 쿼리문은 정상적으로 출력되는데 resultSet에는 아무것도 출력되지 않았다.
왜 저럴까 고민해보고 구글링하다가 Mybatis 사용법을 다시 찾아봤더니
WHERE 절에 in 사용시에는 저런식으로 사용하면 안되고 foreach 로 반복시켜줘야 된다는걸 찾았다.
몇달전에 저렇게 구현했는데 대충 복사 붙여넣기만했더니 까먹었던 내 자신을 비하하며 이번 기회에 제대로 적어둬야겠다...😢
방법은 간단하다.
[수정 후 부분 일부]
//
JSONObject param = new JSONObject();
String arrShopList[] = null;
arrShopList = shopList.split(",");
param.put("arrShopList", arrShopList);
//
--
WHERE
shop_code in
<foreach collection="arrShopList" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
--
String에 'code1', 'code2', 'code3' ... 형태로 담지말고 그냥 code1, code2, code3 ... 형태로 담아준 뒤
이런식으로 , 기준으로 split 시켜 배열에 담아주고 Mybatis에서 foreach 구문으로 돌려주면 된다.
foreach 구문 자체가 직관적이라 이해하기도 쉽다.
반복문 시작전 " ( "괄호가 열리게 되고, 배열이 반복 될때마다 " , "로 구분 된다. 그리고 반복문이 끝나면 " ) " 괄호로 닫히게 된다.
생각없이 기계적으로 만들지 말고 만든건 까먹지 말자..!
'기타' 카테고리의 다른 글
[Linux] Shell script로 서버 상태 체크하기 (0) | 2022.01.13 |
---|---|
[Chrome] PC 브라우저 다크모드 설정 (0) | 2020.12.14 |
[Mac] 터미널 root 사용자 비밀번호 설정 (0) | 2020.12.09 |
[Web] Chrome 80 쿠키 SameSite 설정하기 (2) | 2020.12.04 |