where 절에 in 으로 1개 또는 여러개의 값을 집어 넣어 검색 하는 방법이 있다.
1.
SELECT * FROM ACT_RESL_MST WHERE ACCT_CD IN (SELECT ACCT_CD FROM ACT_ACCT_CD)
이런 방식이다 하나의 컬럼을 출력 하는 쿼리 문을 IN 절에 집어 넣어 구현 하며 제일 구현 하기 쉬우며 풀스캔으로 메모리를 많이 먹는다
2.
SELECT * FROM ACT_RESL_MST WHERE ACCT_CD IN ($SUPER_ACCT_CD$)
로 파라미터를 넘기는 방법인데 기존의 ## 으로 묶어서 보내는 것이 아닌 $$ 으로 보내는 것이다 이것은 STATEMENT 와 PREPARESTATEMENT 의 차이로 알면 쉽다
SUPER_ACCT_CD 파라미터의 값은 스트링 값은 반드시 ArrayList 또는 iterator 형식으로 넣어야 한다.
[
Map map = getLoginMap(request);
String temp_Incm_Cls = ((String)map.get("INCM_CD_CLS")).trim();
String[] rscherNo = temp_Incm_Cls.split(",");
List<String> rscherNo_List =Arrays.asList(rscherNo);
map.put("INCM_CD_CLS", rscherNo_List);
]
3.
SELECT * FROM ACT_RESL_MST
<dynamic prepend="WHERE">
<isNotEmpty property= userNameList>
USERNAME IN
<iterate property="userNameList" open="(" close=")" conjunction=",">
#userNameList[]#
</iterate>
</isNotEmpty >
</dynamic >
이런식으로 직접적으로 LIST 형식 String 값을 map 에 담아 쿼리문에서 생성 하여 구현 한다 속도 측면에서는 가장 높으며 JAVA 단에서 LIST 형식으로 만드는
작업을 해야 한다.
설명 하자면 userNameList 라는 리스트에 1개 또는 그 이상 있을때 실행 되며 userNameList 안에는 그 수의 String 타입의 in 조건들이 있다 먼저 username 이 비어 있는지 확인 한후 값이 있다면 username IN 을 생성 한후 다음에 ( 값을 넣고 다음 값이 있는 경우 ',' 넣고 다 끈난 경우 ) 로 닫고 끈낸다.
'아이바티스' 카테고리의 다른 글
쿼리딴 공백 개행(엔터) 줄바꿈 제거 + 대문자로 변경 (0) | 2013.08.29 |
---|---|
procedure(프로시져) xml 먹통(헛바퀴만 계속 돔) 증상 (0) | 2013.03.06 |
동적쿼리 (0) | 2012.11.19 |
PROCEDURE MERGE 문사용 법2 (0) | 2012.10.24 |
NUNBER 체크 // DATE 형식인지 체크 (0) | 2012.09.11 |