我的第一篇博客,文筆好像不太好 請見諒!
方法一、描寫敘述:給Hibernate的MySQL方言包注冊一個排序方法,該方法中實現了MySQL中文排序。
代碼:
public class MySQLExtendDialect extends MySQLDialect { public MySQLExtendDialect(){ super(); registerFunction("convert_gbk", new SQLFunctionTemplate(Hibernate.STRING, "convert(?1 using gbk)") ); } }
該方法的弊端是須要改不同數據的方言包來實現不改代碼的跨庫。(須要改order by field 為 order by convert_gbk(field))。
方法二、描寫敘述:單獨改動Hibernate的MySQL方言包,改動order by方法,使該方法默認使用convert方法來實現中文排序。
代碼:
public class MySQLGBKDialect extends MySQLDialect { public MySQLGBKDialect() { } public String renderOrderByElement(String expression, String collation, String order, NullPrecedence nulls) { expression = (new StringBuilder("convert(")).append(expression).append(" using 'gbk')").toString(); return super.renderOrderByElement(expression, collation, order, nulls); } }
renderOrderByElement該方法為復寫父類中的方法,長處是不用改其它數據方言包,不用改代碼,缺點是全部的排序方法將都運行convert方法。
方法三、描寫敘述:首選查出該表的全部數據放入到list中,然后可以使用集合的輔助類collections.sort()進行排序。
代碼:
public List<Object> sortByName(){
List<Object> ObjectList=dao.findAll();
Collections.sort(ObjectList,new Comparator<Object>(){
public int compare(Object o1, Object o2) {
String b1 = (String)o1.getName(); //獲取實體的名稱
String b2 = (String)o2.getName();
Collator cmp = Collator.getInstance(java.util.Locale.CHINA); //中文首字母排序規則
if (cmp.compare(b1, b2)>0){
return 1;
}else if (cmp.compare(b1, b2)<0){
return -1;
}
return 0;
}
});
return ObjectList;
}
以上是正序,倒序就把上面大於換成小於,小於換大於;或者-1 變1 ,1變-1 ;
另外如要實現點擊 列表的表頭實現正序和倒序,可以傳遞一個數字給服務器,每點擊一次表頭讓這個數字自增1,后台可以根據這個數字奇偶性來進行正序和倒序。
第一篇博客ctrl+v寫完了 ,有點激動!!!