mybatis procedure cursor resulthandler

mybatis 프로시저 커서 resulsethandler 사용은 3.4.6 버전이 후에 추가된것 같음. 

사용할려면 3.4.6버전이후 버전으로 사용. 

------------------------------------------------------------------------------------------------------------------------------

ResultHandler파라미터는 레코드별로 다룰수 있도록 해준다. List에 추가할수도 있고 Map, Set을 만들수도 있으며 각각의 결과를 그냥 던질수도 있다. ResultHandler로 많은 것을 할 수 있고 마이바티스는 결과셋을 다루기 위해 내부적으로 사용한다.

Since 3.4.6, ResultHandler passed to a CALLABLE statement is used on every REFCURSOR output parameter of the stored procedure if there is any.

http://www.mybatis.org/mybatis-3/ko/java-api.html

mybatis 에서 입력 하는데 뜬금없이 ClassCastException 발생. 

에러 발생 쿼리. 로그 
INSERT INTO TMUSER.TEST_TBL(COL1, COL2, COL3, USER_ID, IP_ADDR) VALUES(?, ?, ?, ?, ?)  
Parameters: asdf(String), I(String), (String), admin(String), 0.0.0.1(String) 

에러 내용. 
[org.mybatis.spring.MyBatisSystemException:](org.mybatis.spring.MyBatisSystemException:) nested exception is [org.apache.ibatis.exceptions.PersistenceException:](org.apache.ibatis.exceptions.PersistenceException:)    
### Error updating database.  Cause: [java.lang.ClassCastException:](java.lang.ClassCastException:) [java.lang.String](java.lang.String) cannot be cast to [java.util.List](java.util.List)


원인. 
<configuration>
    <settings>
        <setting name="useGeneratedKeys" value="true"/>
    </settings>
</configuration>
useGeneratedKeys 이 옵션이 true 로 되어 있어서 발생. 

해결
useGeneratedKeys 를 false로 변경해서 해결. 

아래와 같이 mybatis에서 error가 뜬금 없이 발생했다.  


Caused by: java.io.IOException: Server returned HTTP response code: 408 for URL: http://mybatis.org/dtd/mybatis-3-config.dtd


원인은 http://mybatis.org 사이트가 내려가서 나는 error 였던것 같다. 그래서 

mybatis-3-config.dtd를 로컬에 올려놓고 (WEB-INF/lib/dtd/mybatis-3-config.dtd). 


--변경전

<!DOCTYPE configuration

  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

  "http://mybatis.org/dtd/mybatis-3-config.dtd">


--변경후

<!DOCTYPE configuration

  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

  "WEB-INF/lib/dtd/mybatis-3-config.dtd">


해결. 



==========방법 1==========

logPrefix 를 지정해서 사용하는 방법. 

-- mybatis-env-setting.xml  설정. 

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration

  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

  "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

<settings>

setting name="logPrefix" value="com.qmffjem09.tistory."/>  

</settings>

</configuration>


--logback 설정

<logger name="com.qmffjem09.tistory" level="TRACE" additivity="false">

<appender-ref ref="STDOUT" />

</logger>


==========방법2==========

mybatis intercepter를 등록해서 처리 하는방법. 

아래 url 참조 . 

http://lng1982.tistory.com/248



+ Recent posts