C#

[.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; }  
}

 

Leave a Reply

error: Content is protected !!