언어/Ibatis

[ibatis + MySQL] 동적쿼리 - array로 받은 벨류 IN으로 풀기

antoroong 2025. 2. 23. 23:40

목적

다중 check box 검색필터를 사용할때

여러가지 값들을 array에 담아 보낼때

쿼리는 ex) office IN (’의자’, ’책상’, ‘마우스’)

 

이런 IN안에 넣어서 출력을 해야할 때가 있을 수 있다,

그럴때 사용한다

 

jsp에서 dp_code라는 name값으로 선택된 다수의 value를 쿼리로 보낼 것이다.

 

<div class="chkbox-key6">
		<h6>사무실</h6> 
				<input type="checkbox" name="dr_code" value="TOTAL_DP" id="searchCode_DR_all">
				<label for="searchCode_DR_all" class="checkbox">전체</label>
							
				<input type="checkbox" name="dr_code" value="DR1001" id="searchCode_DR_1">
				<label for="searchCode_DR_1" class="checkbox">의자</label>
							
				<input type="checkbox" name="dr_code" value="DR1002" id="searchCode_DR_2">
				<label for="searchCode_DR_2" class="checkbox">책상</label>		
														
				<input type="checkbox" name="dr_code" value="DR1006" id="searchCode_DR_6">
				<label for="searchCode_DR_6" class="checkbox">마우스</label>		
	</div>

 

java에서 원하는 조건에 따라 dr_code를 set해서 ibatis.xml의 dr_code_array값으로 보낼것이다

   //office값 array로 받아서 set하기
		if(namuBean.getDr_code() != null){
			String dr_code = namuBean.getDr_code();
			dr_code = dr_code.replaceAll(" ", "");
			String[] dr_code_array = dr_code.split(",");
			namuBean.setDr_code_array(dr_code_array);
		}
		namuBean.setDr_code(namuBean.getDr_code());
		System.out.println("::: dr_code => "+namuBean.getDr_code());

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" 
"http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="office">
	<typeAlias alias="officeBean" type="model.office.bean.officeBean" />

<select id="getFurnitureList" parameterClass="officeBean" resultClass="officeBean">
		/*getFurnitureList리스트 출력*/
		SELECT
					a.furniture_seq,
		        	a.dr_code,
		FROM
			  		tb_furniture a

		<isNotEmpty property="dr_code">
			<isNotEqual property="dr_code" compareValue="TOTAL_DR">
				AND dr_code  IN
				<iterate  property="dr_code_array" open="(" close=")" conjunction=",">
	        			#dr_code_array[]#
	    			</iterate>
	    	</isNotEqual>
		</isNotEmpty>
	
	</select>
</sqlMap>