Home  >  Article  >  Database  >  hibernate用hql做中文排序

hibernate用hql做中文排序

WBOY
WBOYOriginal
2016-06-07 16:01:081392browse

用Hibernate+MySQL的童鞋是不是很苦恼为什么MySQL不支持中文排序呢?没办法,只有等utf8_unicode_cn 出来了。如果用hibernate即想实现跨库,又想不改代码如何实现呢,下边告诉你答案。 方法一、描述:给Hibernate的MySQL方言包注册一个排序方法,该方法中实

用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方法。
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:数据库连接整理Next article:tempdb相关总结