程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> hibernate中如何用hql做中文排序

hibernate中如何用hql做中文排序

編輯:關於JAVA

用Hibernate+MySQL的童鞋是不是很苦惱為什麼MySQL不支持中文排序呢?沒辦法,只有等utf8_unicode_cn 出來了。如果用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方法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved