JPQL实现中文排序
2018-07-19 05:38:02来源:博客园 阅读 ()
直接使用JPQL中order by对中文进行排序,出来的结果并不是按拼音排序。
想实现中文排序,需要使用到hibernate.dialect。思路为:手动定义一个sql function,供JPQL使用,实现中文排序,这个function是基于特定的数据库的。
步骤如下:
1. 实现sql function
package com.wgitech.core; import org.hibernate.dialect.Oracle10gDialect; import org.hibernate.dialect.function.SQLFunctionTemplate; import org.hibernate.type.StandardBasicTypes; /** * 数据库为ORACLE * @author amCharlie */ public class OracleChineseDialect extends Oracle10gDialect{ /** * 使JPQL支持中文排序 */ public OracleChineseDialect(){ super(); registerFunction("convert_gbk", new SQLFunctionTemplate(StandardBasicTypes.STRING, "nlssort(?1,'NLS_SORT=SCHINESE_PINYIN_M')")); } }
以上是基于oracle数据库的代码,如果是其他数据库,1. 修改继承的类Oracle10gDialect,2. 找到该数据库中文排序的方法。
如以下是基于MySql的代码:
package com.tbd.core; import org.hibernate.dialect.MySQL57InnoDBDialect; import org.hibernate.dialect.function.SQLFunctionTemplate; import org.hibernate.type.StringType; public class MySQLChineseDialect extends MySQL57InnoDBDialect { public MySQLLocalDialect(){ super(); registerFunction("convert",new SQLFunctionTemplate(StringType.INSTANCE, "convert(?1 using ?2)") ); }
}
查看不同版本数据库对应的方言类请查阅:https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/dialect/package-summary.html(其中ORACLE 10G,ORACLE 11G均用Oracle10gDialect)
2. 配置hibernate.dialect
这是hibernate的一个property,可以按如下配置:
<property name="dialect">com.tbd.core.OracleChineseDialect</property>
3. 使用新建的sql function
使用registerFunction注册的函数,第一个参数即为新方法名,jpql中可以直接使用该方法。举例如下:
String querySql = "select p from Person p order by convert_gbk(p.name)"; List<Person> personList = em.createQuery(querySql, Person.class).getResultList();
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- DES/3DES/AES 三种对称加密算法实现 2020-06-11
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后 2020-06-10
- Spring Boot 实现定时任务的 4 种方式 2020-06-10
- JSP+SSH+Mysql+DBCP实现的租车系统 2020-06-09
- Java实现的三种字符串反转 2020-06-09
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash