利用ibatis的自定義型別解決中文亂碼問題

2021-08-29 14:27:50 字數 964 閱讀 7075

也許大家也遇到過資料庫的字符集和程式的字符集不一致而導致查詢出來或者更新插入的中文資料是亂碼的問題。

我們專案使用的是ibatis作為data access層,對於中文資料也出現了亂碼問題。一開始的想法是後台取出來的資料

或者前台儲存到資料庫的資料每次都手動轉換編碼。但是這樣的方法不僅對於coding,而且對於後期資料庫變換也要

改動程式,絕對不是乙個很好的解決方法。

後來我的想法是希望能在ibatis那一層就把資料做自動處理,經過檢視資料,發現ibatis提供了自定義型別處理器。

所以我的想法就是利用自動型別處理,把所有string型別的資料進行編碼。這樣的話就可以在不改動其他**的情況

下,解決問題。

以下是型別處理器的**:

public class encodingstringtypehandlercallback implements typehandlercallback 

public object getresult(resultgetter getter) throws sqlexception

public object valueof(string s)

public string encoding(string s, string inputencoding, string outputencoding)

return null;

}}

在實際應用中可以把編碼集作為config檔案的屬性,在encodingstringtypehandlercallback的靜態初始塊

讀入其中的某兩個變數中。這樣的話,如果我們需要改變資料庫的時候我們只需要改變config檔案的編碼集修改一下就可以了。

當你把型別處理器寫完的時候只要在sqlmap.xml中加上以下**:

這樣,我們就可以在系統執行的時候自動對所有string進行編碼處理了。

自定義型別

typedef型別 typedef 已有型別 新建型別 示例 typedef double area,volume typedef int number number i1 area a enum enum 列舉型別名 enum week 預設sun 0,可以比較 如果修改必須形如enum week...

自定義型別

下面列舉幾種c語言中常用的自定義資料型別 1.結構體型別 當描述乙個整型變數時,可以用int,描述字元型變數時,可以用char,但要描述乙個學生時,因為這個學生包含的資訊很多,比如姓名,性別,年齡等,不能通過單一的型別來描述,所以,這裡引入結構體型別,將某個事物的共有屬性集合在一起,宣告乙個結構體型...

自定義型別

列舉從字面意思理解就是將可能取的值一一枚舉出來,列舉型別沒有成員 可言,裡邊存放的是可能取值。列舉型別的定義 enum day enum color printf d n red printf d n green printf d n blue 執行結果 day和color都是定義的列舉型別,中的內...