`

Hibernate QBC对汉字进行排序

 
阅读更多
通常在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
分享到:
评论

相关推荐

    Hibernate QBC高级查询.rar

    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(HQL、QBC查询)源码

    Hibernate_QBC和Hibernate_QBE

    虽然没有提供具体的源码,但我们可以理解在Hibernate框架中,QBC和QBE的实现都涉及到对Criteria接口或Example类的使用。Criteria接口提供了添加限制条件、排序、分页等方法,而Example类则用于构建基于对象属性的...

    Java_Hibernate QBC条件查询对比

    开发者可以直接在HQL语句中指定类名、属性名,进行复杂的查询操作,包括但不限于分页、排序、联接等。HQL的优势在于其强大的功能,能够处理复杂的查询逻辑,且易于理解和维护。但是,对于简单的查询,HQL的语法可能...

    QBC_hibernate完整用法

    收录了QBC_hibernate完整用法.大家可以下载看看.作为参考.

    Hibernate QBC分页

    本篇将详细介绍如何使用Hibernate的Query By Criteria (QBC)方式进行分页查询。 首先,我们需要了解QBC的基本概念。QBC是Hibernate提供的一种基于对象的查询方式,与HQL(Hibernate Query Language)类似,但更接近...

    Hibernate_QBC案例.rar

    排序查询(order by) // 6.分页查询 // 7.投影查询(只获取部分字段的结果) // 8.聚集函数使用(聚合函数)(count、sum、avg、max、min等) // 9.TOP N查询 ———————————————— 原文链接:...

    Hibernate_QBC查询[归类].pdf

    总结来说,Hibernate QBC查询是一种强大的查询机制,它通过Criteria API和Expression类提供了丰富的查询表达式,使得开发人员可以在不直接接触SQL的情况下进行复杂的数据库操作。这种面向对象的查询方式不仅简化了...

    Hibernate-HQL-QBC-QBE

    3. QBC(Query By Criteria):QBC是另一种在Hibernate中进行数据查询的方法,它基于Java的标准API(JPA的Criteria API或Hibernate的Criteria API)。QBC允许开发者构建动态查询,通过定义一组标准和约束来获取满足...

    QBC的各种查询

    3. **排序查询**:通过Criteria的setOrder(Order order)或addOrder(Order order)方法进行排序,Order接口的asc()和desc()分别代表升序和降序。 4. **分组查询**:Criteria的createCriteria(String associationPath)...

    Hibernate实例开发 HQL 与 QBC 查询

    QBC的优势在于其灵活性,我们可以方便地组合条件,进行范围查询,甚至可以实现动态查询。例如,如果我们想根据年龄范围查找用户: ```java criteria.add(Restrictions.between("age", 20, 30)); ``` 总的来说,HQL...

    hibernate中文开发手册

    《Hibernate中文开发手册》是Java开发者的重要参考资料,它详尽地介绍了如何在Java应用程序中使用Hibernate框架进行对象关系映射(ORM)。Hibernate作为一款流行的开源ORM解决方案,极大地简化了数据库操作,使得...

    hibernate中文帮助文档

    2. `《SQL 参考手册》中文版 .chm` - 这是一个SQL语言的中文参考手册,对于理解Hibernate的工作方式非常有用,因为Hibernate是通过SQL与数据库进行交互的。掌握SQL的基础知识,如查询、更新、删除和插入语句,能更好...

    hibernate+spring+springmvc框架 @注解开发 详细配置注释/及hibernate的HQL/QBC/SQL查询代码使用及注释

    之前也发了一个,这个包含之前的,还添加了hibernate对数据库操作的代码(注意:controller层两个QBC/SQLTest代码不能运行,只是写出了操作数据库的除了HQL的另外2种方式)。我发现现在还是有很多公司用hibernate+...

    hibernate 3.2中文手册 中文文档

    ### Hibernate 3.2中文手册知识点汇总 #### 第1章:Hibernate入门 - **1.1 前言** - 介绍了Hibernate的基本概念及其重要性。 - 强调了学习Hibernate对于Java开发人员的重要性。 - **1.2 第一部分—第一个...

    QBC的使用全集大全

    3. **指定排序**:如果需要对结果进行排序,可以使用Criteria的addOrder(Order order)方法,Order接口提供了asc(升序)和desc(降序)方法。 4. **分页查询**:对于分页需求,我们可以使用Criteria的setFirstResult(int...

    Hibernate3.2官方中文参考手册

    6. **Criteria查询**:除了使用HQL(Hibernate Query Language)进行查询,Hibernate还提供了Criteria API,它允许开发者以编程方式构建动态查询,更方便地进行条件过滤和排序。 7. **HQL与QBC**:HQL是Hibernate...

    QBC的相关讲义和例题

    QBC的相关讲义和例题 QBC(Query By Criteria)查询方式是Hibernate提供的“更加面向对象”的一种检索方式。QBC在条件查询上比HQL查询更为灵活,而且支持运行时动态生成查询语句。

    QBC查询的别名方的

    下面将对文档中的几个关键点进行详细的解析与扩展。 ### QBC查询简介 QBC(Query By Criteria)是Hibernate提供的一种查询方式,允许开发者通过构建查询条件来动态地创建SQL查询语句。相比于传统的HQL(Hibernate ...

Global site tag (gtag.js) - Google Analytics