hibernate支持中文排序(mysql)



mysql 數據庫中 原生態sql語句 查詢且按中文排序:


sql:
select * from table order by convert(field using gbk )   asc or desc  ;


說明:table是表名、field是字段名 、gbk是編碼格式、


而用hibernate使用以上的語句會報錯誤 using 貌似是關鍵語句、不能使用


那麼如何讓hibernate能中文排序呢?


還記得配置hibernate的時候會有方言配置嗎?


 <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQLDialect
  </prop>


 我們寫一個類MyISAMDialect 、來繼承MySQL5Dialect
import hibernate裏的包就可以了、
public class MyISAMDialect extends MySQL5Dialect {
	
	public MyISAMDialect(){
		super();
		registerFunction("convert_mine", new SQLFunctionTemplate(Hibernate.STRING, "convert(?1 using gbk)"));
	}
    @Override
    public String getTableTypeString() {
        return "engine=MyISAM";
    }
}






engine=MyISAM是數據庫的存儲引擎、不需要的可以不用管(如果有集羣的可以百度下使用哪中存儲引擎、我們集羣使用的是ndbcluster)、


注: convert(?1 using gbk)   可以換成  convert(?1 using ?2)     其實就是看你是不是固定gbk這個編碼集
然後你的hql語句就可以使用 convert 了
舉例:
from User as u order by convert_mine(u.name) 


若是使用了動態編碼集
from User as u order by convert_mine(u.name , 'gbk') 


這樣就可以了、
這樣就支持了中文排序。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章