hibernate 用hql做中文排序,

來源:互聯網
上載者:User

hibernate 用hql做中文排序,

        用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方法。




相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.