[ 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 |