본문 바로가기

MyBatis

Java - Mybatis연동 ( 프로시저 호출 )



#  개요
    앞번글인 "일반 DML호출"에서 프로시저부분만 추가하였다


# 프로시저 
주의점은 프로시저를 생성시 프로시저내부 구문이 오류되었을경우
단지 자바의 오류내용으로는 알기 힘들다.

따라서 프로시저는 sql tool을 이용하여 구문이 오류가 있는지 확인하여야한다.
간단히 프로시저 오류확인법은 다음과 같다.
SELECT OBJECT_NAME, STATUS
FROM USER_OBJECTS
WHERE OBJECT_NAME ='프로시저명'




# 소스 

메인자바 ( 역시 to와 hashmap 방식 두가지 모두 구현했다 )
// 프로시저 호출( hashmap이용 )
HashMap<String, Object> map1 = new HashMap<String, Object>();
map1.put("SEQ", 1);
map1.put("TITLE", "재주");
map1.put("CONTENT", "ㅇ");
session.selectOne("BoardMapper.BOARD_SP", map1);
System.out.println( map1.get("ERR_CODE") );
System.out.println( map1.get("ERR_MSG") );

// 프로시저 호출( TO 이용 )
System.out.println("=====TO이용===");
Board bo2 = new Board();
bo2.setSeq(1);
bo2.setTitle("재주");
bo2.setContent("ㅇ");
session.selectOne("BoardMapper.BOARD_SP2", bo2);
System.out.println(bo2.getERR_CODE());
System.out.println(bo2.getERR_MSG());



매퍼( 주의점은 { 과 call사이 탭 허용안함. 띄어쓰기는 가능 )

<select id="BOARD_SP"  statementType="CALLABLE"                                                                 parameterType="hashmap"  resultType="hashmap">
{call BOARD_SP(        
          #{SEQ, mode=IN,  jdbcType=NUMERIC},
          #{TITLE, mode=IN,  jdbcType=VARCHAR},
          #{CONTENT, mode=IN,  jdbcType=VARCHAR},
          #{ERR_CODE, mode=OUT,  jdbcType=NUMERIC},
          #{ERR_MSG, mode=OUT,  jdbcType=VARCHAR}
       )
}
</select>     


<!-- 입력은 대소문자구분 (to의 필드값)-->
<select id="BOARD_SP2"  statementType="CALLABLE" 
                        parameterType="Board"  resultType="Board">
{call BOARD_SP(        
          #{seq, mode=IN,  jdbcType=NUMERIC},
          #{title, mode=IN,  jdbcType=VARCHAR},
          #{content, mode=IN,  jdbcType=VARCHAR},
          #{ERR_CODE, mode=OUT,  jdbcType=NUMERIC},
          #{ERR_MSG, mode=OUT,  jdbcType=VARCHAR}
       )
}
</select>