[.net mvc][IBatis]아이바티스 iterate 사용법 ( IN절 사용하기)
아이바티스 iterate 사용법 ( IN절 사용하기)
■ 올바른 사용법
< select id=”GetSeqID”  parameterClass=”TestParam” resultClass=”int” > 
   SET NOCOUNT ON; 
   SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 
    
   SELECT DISTINCT SeqID 
   FROM TEMP_TBL A 
   WHERE Year = #Year# 
   < isNotEmpty property=”DisplayYn” prepend=””> 
      < isEqual property=”DisplayYn” prepend=”AND” compareValue=”Y”> 
         < iterate prepend=”” property=”IDList” open=”SeqID IN (” close=”)” conjunction=”,”> 
            #IDList[]# 
         < /iterate> 
       < /isEqual> 
   < /isNotEmpty> 
< /select>
■ 잘 못된 사용법 : $기호를 사용할 경우 SQL injection 공격에 노출됨으로 사용하지 말라
< select id=”GetSeqID”  parameterClass=”TestParam” resultClass=”int” > 
   SET NOCOUNT ON; 
   SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 
    
   SELECT DISTINCT SeqID 
   FROM TEMP_TBL A 
   WHERE Year = #Year# 
   < isNotEmpty property=”DisplayYn” prepend=””> 
      < isEqual property=”DisplayYn” prepend=”” compareValue=”Y”> 
         AND SeqID IN (‘$IDList$’)
       < /isEqual> 
   < /isNotEmpty> 
< /select>
■ 백엔드 코드
private bool CheckDisplayYn() 
{ 
   bool rtnBool = false; 
   TestParam param = new TestParam(); 
   param.Year = DateTime.Today.Year; 
   param.IDList = this.GetSeqIDs(); 
   param.DisplayYn = “Y”; 
   var IDList = _repository.FindAll<int, TestParam>(“GetSeqID”, param);  
   if (IDList.Count > 1) rtnBool = true; 
   return rtnBool; 
} 
private List GetSeqIDs() 
{ 
   var iList = new List(); 
   iList.Add(1); 
   iList.Add(2); 
   iList.Add(3); 
   return iList; 
}
public class ListParam 
{ 
   public IList IDList { get; set; }  
   public string DisplayYn { get; set; }    
   public int Year { get; set; }   
}

