[ myBatis. Sql WHERE문에서 in 처리(2) ]

 

1. 참고

    - myBatis 기능인  <foreach>를 사용할 경우 상당한 overhead가 발생한다.

   그렇다고 $(문장 그대로 대입)형으로 넘기면 차후에  sql injection에서 추출된다.

 

2. 방법1

  - REGEXP 함수사용하기

    REGEXP_SUBSTR()함수를 사용해서 콤마로 구분된 값을 취하고

    CONNECT BY 를 이용해서 문자열의 콤마갯수+1 만큼 LOOP를 돌아 레코드로 만든다.

  - cdList = "111,222,333,444"; 와 같이 넘긴다.

  - SQL

       

 

3. 방법2

    - DB FUNCTION  : 위 방법1의 SQL을  DB FUNCTION으로 만들어서 결과를 Record를 RETURN

    - 방법1보다 간단 하지만  아주 미세하게 속도는 느림 (고려할만한 수준의 속도 저하는 아님)

    - SQL

          

 

     - FUNCTION

      

 

 

4. 방법3

    1. 개발방법(설명)

       - IN 절에서 사용할 IN_테이블 하나 생성

       - java 단에서 in절에 적용될 code에 대해서 insert처리 한다.

       - IN_테이블을 이용해서  SQL문장 완성  

    2. 실 개발방법

       - (테이블)

          CREATE TABLE IN_TABLE

                     (  GUBN  VARCHAR2(20)    NOT NULL

                     ,  CODE   VARCAHR2(100) NOT NULL

                     )

       - (java)

          . 코드값이 : 111,222,333,444 와 같이 4개가 존재 시

          . IN_TABLE에  [GUBN='partCd'], [CODE='1111', CODE='2222', ... ] 와 같이 Insert한다.

       - (sql)

         

 

 

'Web. 기타 언어 > myBatis' 카테고리의 다른 글

myBatis-pk,sequence 생성  (0) 2019.07.11
myBatis - 사용가능한 jdbcType  (0) 2018.07.18
myBatis. Sql WHERE문에서 in 처리  (0) 2017.12.05
myBatis - isEmpty, isNull  (0) 2017.12.05
myBatis. if. case 문  (0) 2017.12.05
Posted by 농부지기
,