iBatis를 사용해서 프로시저를 호출하는 것은 다른 statement(select, update.. )를 호출하는 것처럼 간단하다..
문제는 파라미터의 세팅이다. 호출이야 <procedure> 태그만 적어주면 되는데 파라미터가 꽤나 귀찮게 하는 경우가 생긴다.
1. 자바에서 호출하는 경우
자바에서 호출하는 경우는 CallableStatement 를 사용하게 된다.
2. iBatis에서 프로시저 호출하기
SqlMap 설정
<parameterMap class="map" id="blParam">
<parameter property="p_latitude" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="p_longitude" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="p_utmx" jdbcType="DECIMAL" javaType="long" mode="OUT"/>
<parameter property="p_utmy" jdbcType="DECIMAL" javaType="long" mode="OUT"/>
</parameterMap>
<procedure id="bl_to_utm" parameterMap="blParam">
<![CDATA[
{call PROC_BL_TO_UTM(?,?,?,?)}
]]>
</procedure>
<parameter property="p_latitude" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="p_longitude" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="p_utmx" jdbcType="DECIMAL" javaType="long" mode="OUT"/>
<parameter property="p_utmy" jdbcType="DECIMAL" javaType="long" mode="OUT"/>
</parameterMap>
<procedure id="bl_to_utm" parameterMap="blParam">
<![CDATA[
{call PROC_BL_TO_UTM(?,?,?,?)}
]]>
</procedure>
java 설정
sqlMapper를 실행시킬때 update / queryForObject / queryForList 를 사용할수 있으니 리턴 타입에 맞춰서 사용하면 된다.
out을 리스트로 받는 경우 resultMap을 설정해서 List 형태로도 받을수 있다.
<parameter property="result" jdbcType="ORACLECURSOR" javaType="java.sql.ResultSet" resultMap="resultParam" mode="OUT"/>
resultMap을 설정해주고 resultMap에서 property와 column이름을 설정해주고 class를 미리 만들어놓은 VO객체로 넣어주면 해당항목의 리스트로 프로시저 실행결과가 리턴된다.
3. 주의사항
sqlMap에서 프로시저를 호출할때
<procedure id="bl_to_utm" parameterMap="blParam">
{
call PROC_BL_TO_UTM(?,?,?,?)
}
</procedure>
{
call PROC_BL_TO_UTM(?,?,?,?)
}
</procedure>
위의 코드처럼 중괄호를 적어놓으면 에러가 난다..;; 괜히 보기 편하게 만든다고 했다가 삽질하게 된다.
파라미터의 타입
만약 프로시저의 파라미터가 Number 타입이라면.. OUT 파라미터 정의에서 Number라고 쓰면 에러가 난다.....;;;
오라클의 경우 프로시저 내부에서 Number를 BigDecimal로 변환해서 사용한다고 한다. 따라서 아래처럼 적으면 에러가 난다.
<parameter property="p_utmy" jdbcType="NUMBER" javaType="java.util.Number" mode="OUT"/>ERROR
<parameter property="p_utmy" jdbcType="DECIMAL" javaType="long" mode="OUT"/>
이런 형태로 적어줘야 정상적으로 실행된다. 이것때문에 하루를 꼬박 구글링과 삽질로 보냈다..
오라클 디비를 내가 만든것도 아니고 이런걸 어떻게 알지..-ㅅ-;;
iBatis로 할수 있는게 참 많다.. Result 를 받는 시점에서 rowHandler를 설정해서 xml 트리형태의 데이터를 한방에 가져올수도 있고... 복잡한 파라미터와 조건에 맞춘 쿼리도 쉽게 뽑아내준다..
iBatis 파이팅 -ㅅ-!?;;
출처 : http://rinn.kr/46
'JAVA / JSP' 카테고리의 다른 글
redirect, forword방식의 페이지 이동 (0) | 2012.06.08 |
---|---|
크로스 도메인의 xml 파싱 할때 (0) | 2012.06.07 |
Java+ MyBatis 에서 프로시저 호출하기 (0) | 2012.02.21 |
자바(java) 클라이언트 IP 확인 (0) | 2011.12.29 |
request 객체에 대해 알아보자 (request 객체 사용에 대한 설명) (0) | 2011.08.23 |