IT_Programming/Dev Libs & Framework

[펌_ibatis] typeHandler - TypeHandlerCallback

JJun ™ 2013. 4. 12. 00:32



 출처: http://bestbang.tistory.com/34





ORACLE DB CHARACTER SET US7ASCII 사용하는 DataBase insert 하기 위해서는 

8859_1 변환을 시켜야 한다. 


이를 위해 TypeHandlerCallback 이용하여 해당 DB insert, update 에서만 

따로 정의한 TypeHandler 이용하게끔 했다. 


OracleUsTypeHandler.java

 

....

public class OracleUsTypeHandler implements TypeHandlerCallback

{

       public Object getResult(ResultGetter getter) throws SQLException {

              String str = null;

              try {

                     str = new String(getter.getString().getBytes("8859_1"), "EUC_KR");

              } catch (UnsupportedEncodingException e) {

                     e.printStackTrace();

                     str = getter.getString();

              }

              return str;

       }


       public void setParameter(ParameterSetter setter, Object parameter) throws SQLException {

              String str = null;

              try {

                     str = new String((String)parameter.getBytes("8859_1"), "EUC_KR");

              } catch (UnsupportedEncodingException e) {

                     e.printStackTrace();

                     str = (String)parameter;

              }

              setter.setString(str);

       }


       public Object valueOf(String s) {

              return s;

       }


}




sql-map-config.xml (hendler 이용한 부분적용)

 

<sqlMapConfig>

     ...

     <typeAlias type="com.tistroy.bestbang.OracleUsTypeHandler" alias="ORACLEUS" />

     ...

     <sqlMap resource="sqlmap/TestTable.xml" />

     ...

</sqlMapConfig>




sql-map-config.xml (전체적용)

 

<sqlMapConfig>

    ...

    <typeHandler callback="ORACLEUS" jdbcType="VARCHAR" javaType="java.lang.String" />

    ...

    <sqlMap resource="sqlmap/TestTable.xml" />

    ...

</sqlMapConfig>




TestTable.xml

 


<sqlMap namespace="TestTable">

     ....

     <insert id="insertTestTable" parameterClass="hddrvGodPpc">

          insert into TEST_TABLE(

               num, title

          )

          values (

               ,#num:NUMERIC# ,#title,handler=ORACLEUS#

          )

     </insert>

     ....

</sqlMap>




TypeHandlerCallback 이용시 boolean 처리나 enum 다양한 사용자 정의 TypeHandler 사용이 가능하다.