通常在Criteria查询时,是通过criteria.addOrder(Order.asc("name"))排序;
但是默认情况下是不支持GBK格式,所以汉字无法按照拼音进行排序。下面的方法是重写Hibernate Order方法实现对汉字排序。
package comm;
import java.sql.Types;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.CriteriaQuery;
import org.hibernate.criterion.Order;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.type.Type;
public class GBKOrder extends Order {
private String encoding = "GBK";
private boolean ascending;
private boolean ignoreCase;
private String propertyName;
@Override
public String toString() {
return "CONVERT( " + propertyName + " USING " + encoding + " ) " + (ascending ? "asc" : "desc");
}
@Override
public Order ignoreCase() {
ignoreCase = true;
return this;
}
/**
* Constructor for Order.
*/
protected GBKOrder(String propertyName, boolean ascending) {
super(propertyName, ascending);
this.propertyName = propertyName;
this.ascending = ascending;
}
/**
* Constructor for Order.
*/
protected GBKOrder(String propertyName, String dir) {
super(propertyName, dir.equalsIgnoreCase("ASC") ? true : false);
ascending = dir.equalsIgnoreCase("ASC") ? true : false;
this.propertyName = propertyName;
this.ascending = ascending;
}
/**
* Render the SQL fragment
*
*/
@Override
public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
String[] columns = criteriaQuery.getColumnsUsingProjection(criteria, propertyName);
Type type = criteriaQuery.getTypeUsingProjection(criteria, propertyName);
StringBuffer fragment = new StringBuffer();
for (int i = 0; i < columns.length; i++) {
SessionFactoryImplementor factory = criteriaQuery.getFactory();
boolean lower = ignoreCase && type.sqlTypes(factory)[i] == Types.VARCHAR;
if (lower) {
fragment.append(factory.getDialect().getLowercaseFunction()).append('(');
}
fragment.append("CONVERT( " + columns[i] + " USING " + encoding + " )");
if (lower)
fragment.append(')');
fragment.append(ascending ? " asc" : " desc");
if (i < columns.length - 1)
fragment.append(", ");
}
return fragment.toString();
}
/**
* Ascending order
*
* @param propertyName
* @return Order
*/
public static Order asc(String propertyName) {
return new GBKOrder(propertyName, true);
}
/**
* Descending order
*
* @param propertyName
* @return Order
*/
public static Order desc(String propertyName) {
return new GBKOrder(propertyName, false);
}
}
但是如果用上面的方法之后。数字的排序就达不到预期的目的了,需要利用反射对java类的属性进行判断,查看其类型:
Class<?> c = object.getClass().getField(str).getType();
System.out.println(c.getName());
通过判断类型的不同进行部不同的处理。
详情参考:http://raywithu.iteye.com/blog/1139332
分享到:
相关推荐
4. **Join操作**:在QBC中,可以方便地进行内连接(Inner Join)、左连接(Left Outer Join)以及其他类型的连接操作,以处理多表关联查询。 5. **子查询**:QBC允许我们在查询中嵌套其他查询,这在处理复杂的业务...
Hibernate(HQL、QBC查询)源码 Hibernate(HQL、QBC查询)源码 Hibernate(HQL、QBC查询)源码 Hibernate(HQL、QBC查询)源码 Hibernate(HQL、QBC查询)源码
虽然没有提供具体的源码,但我们可以理解在Hibernate框架中,QBC和QBE的实现都涉及到对Criteria接口或Example类的使用。Criteria接口提供了添加限制条件、排序、分页等方法,而Example类则用于构建基于对象属性的...
开发者可以直接在HQL语句中指定类名、属性名,进行复杂的查询操作,包括但不限于分页、排序、联接等。HQL的优势在于其强大的功能,能够处理复杂的查询逻辑,且易于理解和维护。但是,对于简单的查询,HQL的语法可能...
收录了QBC_hibernate完整用法.大家可以下载看看.作为参考.
本篇将详细介绍如何使用Hibernate的Query By Criteria (QBC)方式进行分页查询。 首先,我们需要了解QBC的基本概念。QBC是Hibernate提供的一种基于对象的查询方式,与HQL(Hibernate Query Language)类似,但更接近...
排序查询(order by) // 6.分页查询 // 7.投影查询(只获取部分字段的结果) // 8.聚集函数使用(聚合函数)(count、sum、avg、max、min等) // 9.TOP N查询 ———————————————— 原文链接:...
总结来说,Hibernate QBC查询是一种强大的查询机制,它通过Criteria API和Expression类提供了丰富的查询表达式,使得开发人员可以在不直接接触SQL的情况下进行复杂的数据库操作。这种面向对象的查询方式不仅简化了...
3. QBC(Query By Criteria):QBC是另一种在Hibernate中进行数据查询的方法,它基于Java的标准API(JPA的Criteria API或Hibernate的Criteria API)。QBC允许开发者构建动态查询,通过定义一组标准和约束来获取满足...
3. **排序查询**:通过Criteria的setOrder(Order order)或addOrder(Order order)方法进行排序,Order接口的asc()和desc()分别代表升序和降序。 4. **分组查询**:Criteria的createCriteria(String associationPath)...
QBC的优势在于其灵活性,我们可以方便地组合条件,进行范围查询,甚至可以实现动态查询。例如,如果我们想根据年龄范围查找用户: ```java criteria.add(Restrictions.between("age", 20, 30)); ``` 总的来说,HQL...
《Hibernate中文开发手册》是Java开发者的重要参考资料,它详尽地介绍了如何在Java应用程序中使用Hibernate框架进行对象关系映射(ORM)。Hibernate作为一款流行的开源ORM解决方案,极大地简化了数据库操作,使得...
2. `《SQL 参考手册》中文版 .chm` - 这是一个SQL语言的中文参考手册,对于理解Hibernate的工作方式非常有用,因为Hibernate是通过SQL与数据库进行交互的。掌握SQL的基础知识,如查询、更新、删除和插入语句,能更好...
之前也发了一个,这个包含之前的,还添加了hibernate对数据库操作的代码(注意:controller层两个QBC/SQLTest代码不能运行,只是写出了操作数据库的除了HQL的另外2种方式)。我发现现在还是有很多公司用hibernate+...
### Hibernate 3.2中文手册知识点汇总 #### 第1章:Hibernate入门 - **1.1 前言** - 介绍了Hibernate的基本概念及其重要性。 - 强调了学习Hibernate对于Java开发人员的重要性。 - **1.2 第一部分—第一个...
3. **指定排序**:如果需要对结果进行排序,可以使用Criteria的addOrder(Order order)方法,Order接口提供了asc(升序)和desc(降序)方法。 4. **分页查询**:对于分页需求,我们可以使用Criteria的setFirstResult(int...
6. **Criteria查询**:除了使用HQL(Hibernate Query Language)进行查询,Hibernate还提供了Criteria API,它允许开发者以编程方式构建动态查询,更方便地进行条件过滤和排序。 7. **HQL与QBC**:HQL是Hibernate...
QBC的相关讲义和例题 QBC(Query By Criteria)查询方式是Hibernate提供的“更加面向对象”的一种检索方式。QBC在条件查询上比HQL查询更为灵活,而且支持运行时动态生成查询语句。
下面将对文档中的几个关键点进行详细的解析与扩展。 ### QBC查询简介 QBC(Query By Criteria)是Hibernate提供的一种查询方式,允许开发者通过构建查询条件来动态地创建SQL查询语句。相比于传统的HQL(Hibernate ...