iBatis에서 selectKey사용시 주의할 점.
Posted 2010. 6. 18. 18:08selectKey사용시 주의할점.
그동안 유용하게 사용하던 iBatis의 selectKey가 어느 순간 가져오지 못하는 경우가 발생했다.
insert 후 LAST_INSERT_ID()를 keyProperty에 담아 가져오게 되는데, 수정후에 가져오지 못하는것 경우가 발생했다.
이전과 달라진 점이라고 한다면 where절에 들어가는 조건이 하나 줄어 굳이 hashmap에 담지 않고
integer로 가져와도 되기에 parameterClass를 hashmap에서 int로 변경.
<insert id="insertUserInfo" parameterClass="KwdGrpClass or hashmap">
insert into kwd_grp ( name, kwd_idx, type )
values(#name#, #kwd_idx#,#type#)
<selectKey keyProperty="kwd_grp_idx" resultClass="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
selectKey는 거의 insert후에 자동증가한 값을 가져오기 위해 사용하는 방법인데,
대부분의 insert시 parameterClass로 hashmap에다 Object Class를 사용하게 되므로
아무 생각없이 selectKey의 keyProperty에 대한 존재감을 잊게되버리는 경우가 발생한다.
하지만 종종 insert문을 select Insert로 사용하게 되는 경우 사용시 주의해야 한다.
ex> insert into kwd_grp ( name, kwd_idx, type )
select name, kwd_idx, type
from kwd
where kwd_idx = #kwd_idx#
위의 예는 억지로 만든거라서 좀 그렇긴 하지만 위의 경우 parameterClass는 string이 될것이다. 그러므로 selectKey를 사용하여 마지막 추가된 idx값(대부분 integer형태)을 가져오려면 keyProperty를 지정하지 않아야 한다. select insert같은 쿼리를 이용해 값을 추가할 때 hasmap이나 object Class 가 아닌 int, string을 parameterClass로 사용하기도 하는데, 이때는 keyProperty를 지정할수 없게 된다.
조금만 생각해보면 당연한 걸수도 있는데, 그저 습관적으로 사용하다보면 그게 당연한걸로 인식되게 되고 그러다 보면 원리를 모른채 코딩을 하게 되곤한다.
특히 쿼리나 메소드, 클래스등의 튜닝이나 Refactoring시 함께 변경해 줘야 할것이다.
'개발노트 > iBatis/myBatis' 카테고리의 다른 글
iBatis에서 myBatis로 변경시 selectKey에 대한 변경사항 (2) | 2013.05.04 |
---|---|
iBatis에서 테이블명 변경등의 쿼리를 이용할때 주의할점 (0) | 2010.09.08 |
iBatis log 예쁘게 보기 (0) | 2010.03.31 |
iBatis에서 Like 검색처리방법.... (1) | 2007.12.06 |
iBATIS-SQLMaps 2.0 Tutorial.pdf(한글번역판) (0) | 2007.10.30 |
- Filed under : 개발노트/iBatis/myBatis