From JCFWiKi
|
|
- 산출물: 오라클 데이터베이스에서 JCF 한글처리 모듈
- 작성자: 나윤주
- 최초작성일 : 2008/06/13
- 최종작성일 : 2008/06/16
Copyright © 2008 Daewoo Information Systems Co., Ltd.
|
|
|
- 이 문서는 오라클 데이터베이스에서 한글을 지원하지않는 CHARSET을 사용할 경우 화면에서 한글이 깨져 보이는 문제점을 지원하기 위한 JCF 모듈에 관련된 것입니다.
|
[편집] Type Handler
- iBatis의 type handler는 preparedStatement에서 설정되는 파라미터 값들을 다시 셋팅하여 SQL문을 실행하고, resultSet으로 받은 결과 값들을 다시 셋팅하여 resultMap에 담아준다.
- iBatis에서는 String, Integer, Byte 등 각 Object에 대한 기본적인 Type Handler를 제공한다.
[편집] OracleStringTypeHandler
- 한글이 지원되지 않는 CHARSET으로 설정된 오라클 데이터베이스를 사용할 경우, 모델의 String type 변수와 데이터베이스의 VARCHAR2, CHAR, CLOB의 CharSet 변환을 도와주는 클래스이다.
|
|
- VARCHAR2, CHAR, CLOB 뿐만 아니라, 모델의 String type 변수와 연결된 데이터베이스의 모든 타입은 이 핸들러를 거치기 때문에 모델 작성에 유의해야 한다.
|
[편집] Implementation
- JCF의 OracleStringTypeHandler는 iBatis의 StringTypeHandler를 확장하였다.
- 클래스 로드시, app.properties 파일로 부터 지정된 데이터베이스와 화면의 CharSet을 설정한다.
- 핸들러의 과정은 다음과 같다.
- 데이터 추가/수정 시, preparedStatement의 파라미터 값을 화면 CharSet에서 데이터베이스 Charset으로 변경한다.
- 데이터 조회 시, resultSet의 결과 값들을 데이터베이스 Charset에서 화면 CharSet으로 변경한다.
OracleStringTypeHandler의 동작
[편집] JCF의 OracleStringTypeHandler 적용하기
- app.properties 파일 수정.
- 아래의 코드를 추가한다.
- dbEnc 속성: 오라클 데이터베이스의 CHARSET으로, US7ASCII를 사용할 경우 dbEnc는 ISO-8859-1로 지정해주어야 한다.
- viewEnc 속성: 화면에서 보여질 CHARSET으로, 한글을 사용할 경우 UTF-8 또는 EUC-KR 등을 지정한다.
|
|
- 데이터베이스와 화면의 CHARSET에 따라 설정 값이 변경될 수 있으므로, 테스트 후 상황에 맞는 적절한 CHARSET을 지정하여야 한다.
|
###############################################################################
# for charset conversion
# @dbEnc: charset of database (oracle)
# @viewEnc: charset of view(client layer)
dbEnc=ISO-8859-1
viewEnc=UTF-8
- sqlmap-config.xml 파일 수정.
- typeHandler 태그의 callback 함수로 jcf.dao.ibatis.typehandler.OracleStringTypeHandler를 지정해준다.
- jdbcType 옵션은 지정하지 않고, javaType이 String인 경우 이 핸들러가 수행된다.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<settings cacheModelsEnabled="true" />
<typeHandler callback="jcf.dao.ibatis.typehandler.OracleStringTypeHandler"
javaType="java.lang.String" />
<!-- ==========Framework Configuration Section============= -->
<!-- 중간생략 -->
</sqlMapConfig>
- applicationContext.xml 파일 수정.
- 프로퍼티 파일의 dbEnc와 viewEnc 속성을 설정하기 위해 applicationContext에서 OracleStringTypeHandler의 bean을 등록해준다.
<?xml version="1.0" encoding="UTF-8"?>
<!-- 중간생략 -->
<!-- ========================= Oracle String Type Handler ========================= -->
<bean id="oracleStringTypeHandler" class="jcf.dao.ibatis.typehandler.OracleStringTypeHandler">
<property name="dbEnc">
<value>${dbEnc}</value>
</property>
<property name="viewEnc">
<value>${viewEnc}</value>
</property>
</bean>
<!-- 이하생략 -->