본문 바로가기

JAVA / JSP

Java+ MyBatis 에서 프로시저 호출하기


myBatis 에서 paramterMap을 더이상 사용하지 말자고 했기 때문에.. 이전처럼 프로시저를 호출하는 것은 무리가 있다.

Procedure 관련 체크해야할 변경사항은.. 일단 parameterMap이 사라진것.. 그리고 <procedure > 가 사라지고 type 으로 판단하게 된것이다.

parameterMap이 사라지고 MyBatis에서는 inlineStatement를 사용하라고 이야기 하고있다.  이것은 #{var}안에 직접 파라미터를 넣어서 사용하는 방법이다. 이방법에 따라서 이전 소스를 myBatis 버전으로 컨버팅 해보자.



iBatis 소스

<PARAMETERMAP id=blParam class=map>
 <PARAMETER mode="IN" javaType="java.lang.String" jdbcType="VARCHAR" property="p_latitude" />
 <PARAMETER mode="IN" javaType="java.lang.String" jdbcType="VARCHAR" property="p_longitude" />
 <PARAMETER mode="OUT" javaType="long" jdbcType="DECIMAL" property="p_utmx" />
 <PARAMETER mode="OUT" javaType="long" jdbcType="DECIMAL" property="p_utmy" />
</PARAMETERMAP>
  
<PROCEDURE id=bl_to_utm parameterMap="blParam">
 {call PROC_BL_TO_UTM(?,?,?,?)}
</PROCEDURE>
<procedure > 태그를 사용해서 프로시저를 정의 하고 들어오는 변수는 parameterMap에 정의해놓았다.

java 소스

Map<STRING, Object> map = new HashMap<STRING,OBJECT>();
map.put("p_latitude",vo.getX_latitude());
map.put("p_longitude", vo.getX_longitude());
sqlMapper.update("VocIphone.bl_to_utm", map );
     
System.out.println(map.get("p_utmx").toString());
System.out.println(map.get("p_utmy").toString());

자바쪽에서는 map에 IN 타입 변수를 담아서 쿼리를 실행시키고 map의 OUT 타입 변수에 엑세스 해서 값을 가져온다.



MyBatis 소스

<UPDATE id=testProc parameterType="vo.ProcVO" statementType="CALLABLE">
 {call PROC_BL_TO_UTM(#{latitude,mode=IN,jdbcType=VARCHAR},#{longitude,mode=IN,jdbcType=VARCHAR},#{utmx,mode=OUT,jdbcType=DECIMAL},#{utmy,mode=OUT,jdbcType=DECIMAL})}
</UPDATE>

statementType을 "CALLABLE"로 설정해주면 procedure를 호출하게 된다.
  parameterType 에는 클래스 파일을 지정해주고 직접 파라미터 부분에 들어올 타입에 대한 세팅을 하게 된다.

vo.ProcVO.java

public class ProcVO {
 
 private String latitude = "";
 private String longitude = "";
 private String utmx = "";
 private String utmy = "";
 ... 이하 getter/setter

이건 그냥 데이터를 옮기기위한 빈즈 파일

실제호출 java
ProcVO proc = new ProcVO();
proc.setLatitude("37.539421");
proc.setLongitude("127.047852");
session.update("myBatis.mappers.UserMapper.testProc", proc);
System.out.println("utmx : "+proc.getUtmx()+" utmy : "+proc.getUtmy());

자바쪽에서는 기존처럼 넘겨주면 된다. map 대신 클래스파일에 데이터를 담아주기만 하면 된다.
결과 코드 역시 자바클래스에서 getter로 받아오면 완료.


출처 : http://rinn.kr/51