Mybatis - (foreach) SQL IN절 사용법 및 예제

HanSamDul·2023년 7월 5일
0
post-thumbnail

두 그리드 목록 비교 후 팝업

1. 비교할 그리드 체크 박스 선택

2. 비교분석 버튼 클릭

3. 비교 데이터 팝업 화면 출력

화면

  • 메인화면
  • 팝업화면

소스코드

[jsp] 저장버튼 호출 함수

/* 비교분석 팝업 호출 */
function showComparePopup(){

	var items = [];
	$.each(grid.data.serialize(),function(index,item){
		if(item.ROW_CHK){
			items.push(item.BM_KIND_SEQ);
		}
	});
	if(items.length < 2){
		alert('<spring:message code="message.select.item.MoreThanTwo"/>');
		return false;
	}

	var url = 'popupBmResultView.do';
	var param = {'BM_KIND_SEQ_LIST':items};
	var width = 1024;
	var height = 780;
	show_popup(url,'popupBmResultView',width,height,param);
}

[java] controller

@RequestMapping("/popupBmResultView")
public String popupBmResultView(HttpServletRequest request, ModelMap model) throws Exception{
	return bmService.popupBmResultView(request, model);
}

[java] service

public String popupBmItemView(HttpServletRequest request, ModelMap model) throws Exception;

[java] serviceimpl

@Override
public String popupBmResultView(HttpServletRequest request, ModelMap model) throws Exception {
	String tmp = request.getParameter("BM_KIND_SEQ_LIST");	// temp : 13, 14
	String BM_KIND_SEQ_LIST[] = tmp.split(",");				// BM_KIND_SEQ_LIST[] :  [13, 14]
	JSONObject param = new JSONObject();
	param.put("LANG", SessionUtil.getLangcode());
	param.put("BM_KIND_SEQ_LIST", BM_KIND_SEQ_LIST);
	List<JSONObject> list = bmMapper.selectBmKindList(param);
	JSONArray addColumns = new JSONArray();
	for(JSONObject item : list) {							// foreach
		String text = item.getString("MODEL_NAME")+" / "+item.getString("YY_SERIES_NM");
			
		JSONObject cols = new JSONObject();
	   	JSONArray header = new JSONArray();
	   	JSONObject headerItem = new JSONObject();
	   	headerItem.put("text", text);
	   	header.add(headerItem);
	   		    	
	    cols.put("width", 250);
	   	cols.put("id", item.getString("BM_KIND_SEQ"));
	   	cols.put("header", header);
	    cols.put("type", "string");
	   	cols.put("resizable", true);
	   	cols.put("sortable", false);
	   	addColumns.add(cols);
	    	 
	}
	model.addAttribute("GRID_COL_LIST", addColumns);
	model.addAttribute("menuname", commonService.getPopupMenuName(request));
		
	return "benchmark/popupBmResultView";
}
  • foreach문을 통해서 list에서 원하는 데이터 뽑아낸다.
  • GRID_COL_LIST
    [ {"width": 250,"id": "13",
    "header": [{"text": "AGM70 L3 / 21MY"}],"type": "string","resizable": true,"sortable": false},
    {"width": 250,"id": "14",
    "header": [{"text": "AGM80 L4 / 21MY",}],"type": "string","resizable": true, sortable": false}]

[data] List< JSONObject > list

[{
	"RNO": 1,
	"BM_KIND_SEQ": 13,
	"MODEL_NAME": "AGM70 L3",
	"PROD_COMP": "0000004148",
	"PROD_COMP_NM": "Clarios",
	"SALE_AREA_CD": "0000002430",
	"SALE_AREA_NM": "미국",
	"PROD_LOT": "2391040212831879",
	"YY_SERIES": "0000002480",
	"YY_SERIES_NM": "21MY",
	"PRODUCT_TYPE_CD": "0000004144",
	"PRODUCT_TYPE_NM": "AGM"
}, {
	"RNO": 2,
	"BM_KIND_SEQ": 14,
	"MODEL_NAME": "AGM80 L4",
	"PROD_COMP": "0000004148",
	"PROD_COMP_NM": "Clarios",
	"SALE_AREA_CD": "0000002430",
	"SALE_AREA_NM": "미국",
	"YY_SERIES": "0000002480",
	"YY_SERIES_NM": "21MY",
	"PRODUCT_TYPE_CD": "0000004144",
	"PRODUCT_TYPE_NM": "AGM"
}]

[xml]

	<select id="selectBmKindList" parameterType="json" resultType="json">
		SELECT ROWNUM AS RNO, B.*
	    FROM (	SELECT A.BM_KIND_SEQ
				      ,A.MODEL_NAME    
				      ,A.PROD_COMP     
				      ,PREMIER_SYS.GET_ITGR_CODE_NAME(A.PROD_COMP, #{LANG}) AS PROD_COMP_NM
				      ,A.SALE_AREA_CD
				      ,PREMIER_SYS.GET_ITGR_CODE_NAME(A.SALE_AREA_CD, #{LANG}) AS SALE_AREA_NM
				      ,A.PROD_LOT
				      ,A.YY_SERIES
				      ,PREMIER_SYS.GET_ITGR_CODE_NAME(A.YY_SERIES, #{LANG}) AS YY_SERIES_NM
				      ,A.PRODUCT_TYPE_CD
				      ,PREMIER_SYS.GET_ITGR_CODE_NAME(A.PRODUCT_TYPE_CD, #{LANG}) AS PRODUCT_TYPE_NM
				  FROM PDM_BM_KIND A
		         WHERE 1=1
		         <if test="BM_KIND_SEQ != null and BM_KIND_SEQ != ''">
		           AND A.BM_KIND_SEQ = #{BM_KIND_SEQ}
		         </if>
		         <if test="BM_KIND_SEQ_LIST != null">
		           AND A.BM_KIND_SEQ IN
		          	<foreach collection="BM_KIND_SEQ_LIST" item="ITEM" open="(" close=")" separator="," index="index">
		            #{ITEM}
		         	</foreach>
		         </if>
		         ORDER BY 2,3 ) B
	</select>

Mybatis - foreach

0개의 댓글