Hibernate使用中文排序.
来源:互联网 发布:四川省网络直报 编辑:程序博客网 时间:2024/05/18 18:53
Mysql在使用utf-8字符集的时候,不能正确的以中文进行排序.
所以得强制mysql进行中文排序
select * from table ORDER BY CONVERT(column USING gbk);
但是hql并不支持 CONVERT这个语法.所以得改变hibernate的方言(hibernate.dialect)将它设置为我们自定义的dialect.
package com.sangame.ds.ws.util;import org.hibernate.Hibernate;import org.hibernate.dialect.MySQLDialect;import org.hibernate.dialect.function.SQLFunctionTemplate;/** * Created by Administrator on 2017/7/27. */public class MySQLExtendDialect extends MySQLDialect { public MySQLExtendDialect(){ super(); registerFunction("convert_gbk", new SQLFunctionTemplate(Hibernate.STRING, "convert(?1 using gbk)") ); }}
需要创建一个类去继承MySQLDialect,在无参构造器中使用registerFunction函数,传入第一个参数,用于指定hql可识别的函数.第二参数用于指定函数的功能,这里就可以指定mysql可以
识别的语句,并将它赋予给自定义的hql函数. 这里convert_gbk = convert(?1 using gbk)了(?1为占位符)
创建好Dialect类后,就要指定hibernate的默认dialect为该类了.
hibernate.dialect=com.sangame.ds.ws.util.MySQLExtendDialect这时就可以在hql中使用convert_gbk函数来替代mysql中的CONVERT函数实现中文排序了.public Page<HashMap> findPlauLogPage(TerminalPlayLogVo search, int currentPage, int pageSize) { StringBuilder hql = new StringBuilder(); hql.append("select new map(itemName as itemName,terminal.terminalGroup.id as terminalGroupId,terminal.terminalName as terminalName,count(*)as playCount) from TerminalPlayLog WHERE 1 = 1"); Long tid = null; Long gid = null; String itemName = null; String terminalName = null; Date playBeginTime =null; Date playEndTime = null; if (search != null) { if (search.getTerminal() != null && search.getTerminal().getId() != null) { hql.append(" and terminal.id = :tid"); tid = search.getTerminal().getId(); } if (search.getTerminal() != null && search.getTerminal().getTerminalGroup() != null && search.getTerminal().getTerminalGroup().getId() != null) { hql.append(" and terminal.terminalGroup.id = :gid"); gid = search.getTerminal().getTerminalGroup().getId(); } if (StringUtils.isNotBlank(search.getItemName())) { hql.append(" and itemName like :itemName"); itemName ="%" + search.getItemName() + "%"; } if (search.getTerminal() != null && StringUtils.isNotBlank(search.getTerminal().getTerminalName()) ) { hql.append(" and terminal.terminalName like :terminalName"); terminalName ="%" + search.getTerminal().getTerminalName() + "%"; } if (search.getPlayBeginTime() != null) { hql.append(" and playBeginTime >= :playBeginTime"); playBeginTime = search.getPlayBeginTime(); } if (search.getPlayEndTime() != null) { hql.append(" and playEndTime <= :playEndTime"); playEndTime = search.getPlayEndTime(); } } hql.append(" GROUP BY itemName,terminal.terminalName,terminal.terminalGroup.id order by convert_gbk(itemName) ASC");
阅读全文
0 0
- Hibernate使用中文排序.
- mysql5+hibernate中文排序
- 关于hibernate的中文排序
- hibernate支持中文排序(mysql)
- 解决Hibernate中MySQL的中文排序
- hibernate 用hql做中文排序
- Hibernate中文排序乱序问题
- 排序别名使用中文出错
- 使用Hibernate和Mysql中文乱码问题解决
- 使用Hibernate和mysql中文乱码问题
- Hibernate 实现Oracle的中文汉字按照拼音排序
- Mysql数据库下Hibernate按中文姓名排序
- Hibernate中使用detachedCriteria.addOrder(Order.desc 错误 hibernate排序
- 使用 JavaScript 对中文进行排序
- Hibernate 实现Oracle的中文汉字按照拼音排序 之延续,通用的查询排序能力。
- sqlserver按'一二三四五'排序(hibernate对中文数字进行排序)
- Hibernate排序
- hibernate排序
- oracle 高水位线详解
- 2014年足球赛第一脚!高科技外骨骼
- sleep(),wait(),yield()和join()方法的区别
- 总结:ajax多文件上传,带进度条,前端篇
- C++中string和char数组之间的转换---补充(16)《Effective C++》
- Hibernate使用中文排序.
- Python延迟初始化(lazy property)
- cinder 调度代码分析
- ConcurrentHashMap实现原理
- Python file
- iOS系统及微信中不支持audio自动播放问题
- Vue自定义命令
- MySQL 条件分类及ICP特性
- Ambari学习笔记:安装、配置与启动