hibernate中文排序的解決方法


我的第一篇博客,文筆好像不太好 請見諒! 

方法一、描寫敘述:給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寫完了 ,有點激動!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM