IBATIS 数据库字符集转换(中西文转换)

来源:互联网 发布:网络热门歌曲 编辑:程序博客网 时间:2024/06/05 15:08

 1、创建实现类类,实现IBatis接口TypeHandlerCallback

 2、SqlMapConfig.xml文件中加入红色的配置

<sqlMapConfig>
 
 <settings cacheModelsEnabled="true" enhancementEnabled="true"
  lazyLoadingEnabled="false" errorTracingEnabled="true" maxRequests="512"
  maxSessions="1000" maxTransactions="50" useStatementNamespaces="true"/>
 <typeAlias type="com.*****.***.EncodingStringTypeHandlerCallback" alias="ENCODE"/>  
 <typeHandler callback="ENCODE" javaType="java.lang.String"/>
 <sqlMap resource="..."/>
</sqlMapConfig>

 

实现类如下:

public class EncodingStringTypeHandlerCallback implements TypeHandlerCallback
{
    boolean flag = InitParam.getDbEncoding("DbEncoding");


    public Object getResult(ResultGetter arg0) throws SQLException {
        //西文字符集转换
        if(flag){
            return StringUtil.ISOtoGBK(arg0.getString());
        }
        return arg0.getString();
     }

     public void setParameter(ParameterSetter setter, Object arg1) throws SQLException {
        if(arg1 instanceof String)
        {
          //西文字符集转换
            if(flag){
                setter.setString(StringUtil.GBKtoISO((String)arg1));
            }
            else{
                setter.setString((String)arg1);
            }
        }
     }
     public Object valueOf(String arg0) {
         //西文字符集转换
         if(flag){
             return StringUtil.ISOtoGBK(arg0);
         }
        return arg0;
     }
}

public class StringUtil

{

    public static String ISOtoGBK(String s) { 
        if (s == null || (s.trim()).equals(""))
            return s;
        try {   
            s = new String(s.getBytes("iso-8859-1"), "GBK");   
        } catch (Exception e) {   
        }   
        return s;   
    } 
   
    public static String GBKtoISO(String s) {  
        if (s == null || (s.trim()).equals(""))
            return s;
        try {   
            s = new String(s.getBytes("GBK"), "iso-8859-1");   
        } catch (Exception e) {   
        }   
        return s;   
    }  

}