hibernate提供了两种排序方式:1:数据库排序,也就是说通过SQL语句在数据库内部就进行完了排序。2.内存排序,也就是说在数据库中把数据加载到内存中后在进行排序。推荐使用第一种排序方式,因为在数据库中排序的性能要远远高于在内存中排序的性能。

一:数据库排序

  使用集合标签中的order-by属性,格式主要是为: order-by="字段名 排序方式”;例如:order-by="name ASC” name是指数据库字段 ASC是升序(默认值,可以省略)、DESC是降序。在hibernate中,<set>、<idbag>、<map>、<list>元素都有order-by属性,如果设置了该属性,Hibernate会利用 order by 子句进行排序,使用order-by属性,我们可以通过hbm文件执行生成的SQL如何使用orderby 查询子句以返回排序后的结果集。下面我们就以一个具体的实例来具体看一下数据库排序的内容

  

<set name="students" table="studentOrder" order-by="name desc"> 

二.内存排序

内存排序,顾名思义,就是在内存中排序,把查询到得结果加载到内存以后惊醒排序。Hibernate在配置文件中也给我提供了内存排序的配置,那就是sort属性,它有两个属性值可以直接使用,分别是unsorted(不排序)以及natural(自然排序,即升序),此外,我们还可以自定义排序规则,方式是定义一个类,让其实现Comparator接口,并且实现该接口中的compare方法,在该方法中实现排序规则即可。然后将该自定义排序规则的类名作为sort的属性值即可。<set>和<map>元素都具有sort属性,如果设置了该属性,就会对内存中的集合对象进行排序。

<set>元素的sort属性为natural,表示对集合中的字符串进行自然排序。Hibernate采用org.hibernate.PersistentSortedSet作为Set的实现类,PersistentSortedSet类实现了 java.util.SortedSet接口。当Session保存一个对象时,会调用 org.hibernate.type.SortedSetType类的wrap()方法,把对象的集合属性包装为 SortedSet类的实例,下面我们看一下wrap()方法的源代码如下:

public PersistentCollection wrap
(SessionImplementor session, Object collection) { return new PersistentSortedSet(session, (java.util.SortedSet) collection ); }

从wrap()方法的源代码看出,应用程序中创建的对象的集合属性必须是java.util.SortedSet类型,否则以上wrap()方法会抛出ClassCastException。

其实内存排序和数据库排序是一样的,只是配置的参数不同而已,都是在集合标签配置一下,所以在此我们就不以示例演示了。

从wrap()方法的源代码看出,应用程序中创建的对象的集合属性必须是java.util.SortedSet类型,否则以上wrap()方法会抛出ClassCastException。

其实内存排序和数据库排序是一样的,只是配置的参数不同而已,都是在集合标签配置一下,所以在此我们就不以示例演示了。

hibernate查询排序的更多相关文章

  1. Hibernate 查询方式(HQL/QBC/QBE)汇总

    作为老牌的 ORM 框架,Hibernate 在推动数据库持久化层所做出的贡献有目共睹. 它所提供的数据查询方式也越来越丰富,从 SQL 到自创的 HQL,再到面向对象的标准化查询. 虽然查询方式有点 ...

  2. Hibernate查询

    HIbernate查询 使用get方法 使用get方法通过持久类名和ID号查找一个对象Stu instance = (Stu) getsession() .get("com.lovo.po. ...

  3. (十)Hibernate 查询方式

     所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:Hibernate 查询方式简介 1,导航对象图查询方式: 2 ...

  4. Hibernate查询以及优化策略04

    一. HQL查询 1. HQL(hibernate query language)单表查询 1.1 准备项目 创建项目: hinernate-03-query 引入jar,同前一个项目 复制实体(订单 ...

  5. Hibernate学习10——Hibernate 查询方式

    本章主要是以查询Student的例子: Student.java: package com.cy.model; public class Student { private int id; priva ...

  6. Hibernate学习笔记(五)—— Hibernate查询方式

    一.对象图导航查询 对象图导航查询方式是根据已经加载的对象,导航到他的关联对象.它利用类与类之间的关系来查询对象.比如要查找一个联系人对应的客户,就可以由联系人对象自动导航找到联系人所属的客户对象.当 ...

  7. java之hibernate之hibernate查询

    这篇主要简单间接 hibernate查询 1.数据库操作中最重要的是查询,Hibernate提供了多种查询方式来帮助程序员快速实现查询功能. 有hql,本地sql查询,Criteria查询,examp ...

  8. 三大框架 之 Hibernate查询(一对多、多对多、查询关系)

    目录 一对多 表之间关系 表之间关系建表原则 一对多关系配置 建立表 建立ORM 添加配置文件 在hibernate.cfg.xml中的标签里,添加核心配置文件 引入工具类 编写测试类 级联操作 什么 ...

  9. Hibernate 查询MatchMode的四种模式

    Hibernate 查询MatchMode的四种模式 MatchMode.START:字符串在最前面的位置.相当于"like 'key%'" MatchMode.END:字符串在最 ...

随机推荐

  1. BZOJ 3544 [ONTAK2010]Creative Accounting(set)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3544 [题目大意] 找一段区间使得Σai mod m的值最大. [题解] 首先计算前缀 ...

  2. 【序列莫队+二分答案+树状数组】POJ2104-K-th Number

    [题目大意] 给出一个长度为n的序列和m组查询(i,j,k),输出[i,j]中的第k大数. [思路] 先离散化然后莫队分块.用树状数组来维护当前每个值的个数,然后对于每次询问二分答案即可. 又一次实力 ...

  3. (转)Hadoop系列-IPC模型

    学习笔记Mark IPC 实现RPC的一种方法,具有快速.简单的特点. 它不像Sun公司提供的标准RPC包,基于Java序列化. IPC无需创建网络stubs和skeletons. IPC中的方法调用 ...

  4. 微信小程序,工具未检测合法域名,400 (Bad Request)错误

    1.工具未检测合法域名 这个我就不多说了,如果你新建的时候没有填写AppID的话这个我就不太清楚了 如果新建项目的时候填写了AppID的话,出现这种错误,那你应该去小程序后台 设置->开发者设置 ...

  5. new placement 的使用

    #include <iostream> #include "TModel.h" int main() { ]; std::cout<<"Sourc ...

  6. Android网络通信框架LiteHttp2.0 开篇简介和大纲目录

    本帖最后由 移动天宇 于 2015-10-26 10:42 编辑 LiteHttp2.0很多东东焕然一新,旧的能力也得到增强,没有使用的同学来了解一下吧. Android网络框架为什么可以选用lite ...

  7. 普通项目转换成maven项目

    参看文档:http://czj4451.iteye.com/blog/1983889 maven仓库:http://mvnrepository.com/     基本步骤如下: Configue--& ...

  8. 性能问题: SQL*Net message from client 等待时间太长

    今天我终于自己遇到了这个问题, PO form 打不开了, 看了下 trace 发现 SQL*Net message from client 等待时间太长. 但是这不可能是网络问题, 这个环境是在我电 ...

  9. openwrt web管理luci界面修改

    转自:http://blog.csdn.net/user_920/article/details/8504979 以前都没听过openwrt和luci,只接触过简单的php语言.由于工作原因,要修改下 ...

  10. UITabBarController 详解

    // UITabBarController 标签视图控制 // 主要管理没有层级关系的视图控制器 // 1. ViewControllers 所有被管理的视图控制器, 都在这个数组中 // 2. se ...