ibatis提供TypeHandlerCallback让编程人员进行一些特殊类型的处理,最近碰到ibatis+oracle中文乱码,由于找不到解决的办法,故用实现该接口进行类型转换:
public class EncodingHandler implements TypeHandlerCallback {
/**
* ISO8859-1->GBK
*/
@Override
public Object getResult(ResultGetter getter) throws SQLException {
String str = null;
try {
if (null != getter.getString()) {
str = new String(getter.getString().getBytes("ISO8859-1"), "GBK");
}
} catch (Exception e) {
str = getter.getString();
}
return str;
}
/**
* GBK->ISO8859-1
*/
@Override
public void setParameter(ParameterSetter setter, Object parameter) throws SQLException {
String str = null;
try {
if (null != parameter) {
str = new String(((String) parameter).getBytes("GBK"), "ISO8859-1");
}
} catch (Exception e) {
str = (String) parameter;
}
setter.setString(str);
}
@Override
public Object valueOf(String arg0) {
return arg0;
}
}
sqlmap的配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<settings useStatementNamespaces="true" enhancementEnabled="true" />
<typeHandler callback="EncodingHandler" jdbcType="VARCHAR" javaType="java.lang.String" />
<sqlMap resource="XXX.xml"/>
</sqlMapConfig>