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. 一个应用 可以有多个application

    韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha 313134555@qq.com 一个应用里面怎样才能有2个application 一个AndroidManifest.xml中可 ...

  2. 【递归】【线段树】【堆】AtCoder Regular Contest 080 E - Young Maids

    给你一个1~n的排列p,n是偶数,每次从中任选一对相邻的数出来,插到排列q的开头,如此循环,问你所能得到的字典序最小的排列q. 我们先确定q开头的两个数q1,q2,q1一定是p的奇数位的最小的数,而q ...

  3. 【BFS】bzoj2252 [2010Beijing wc]矩阵距离

    要注意一开始将所有为'1'的点入队,然后通过一次BFS去更新所有点的距离,直到无法更新为止. #include<cstdio> #include<queue> #include ...

  4. 免费网站监控服务阿里云监控,DNSPod监控,监控宝,360云监控使用对比

    网站会因为各种原因而导致宕机,具体表现为服务器没有响应,用户打不开网页,域名解析出错,搜索引擎抓取页面失败,返回各种HTTP错误代码.网站宕机可能带来搜索引擎的惩罚,网站服务器不稳定与百度关系文章中就 ...

  5. OpenVPN设置客户端固定IP

    在使用openvpn的过程中,多台客户端连接上同一台openvpn服务器之后,客户端的的IP地扯经常变动,导致客户端之间无法正常通讯,openvpn的版本变动也导致了固定IP地扯的配置不同,用以下方法 ...

  6. 虚拟PDF打印机

    doPDF虚拟打印机 doPDF 是一个免费的PDF转换器,可同时运用于商业和个人,它把自己安装为一个打印机驱动,允许从任意一个有打印输出的Windows程序中打印,还包含缩放,质量定义和页面大小定义 ...

  7. Hive技术拾遗

    1. SELECT语句可以使用正则表达式做列选择,下面的语句查询除了ds和h 之外的所有列:SELECT `(ds|hr)?+.+` FROM sales 2. LEFT SEMI JOIN的限制是, ...

  8. Kubernetes Pod日志太大导致空间问题

    在log-driver是json-file的模式下,容器的日志存放在/var/lib/docker/containers/下面,是以container_id-json.log文件存放 但缺省方式下,l ...

  9. OpenCV腐蚀与膨胀(Eroding and Dilating)

    腐蚀与膨胀(Eroding and Dilating) 目标 本文档尝试解答如下问题: 如何使用OpenCV提供的两种最基本的形态学操作,腐蚀与膨胀( Erosion 与 Dilation): ero ...

  10. [转]SQL Server 2008支持将数据导出为脚本

    本文转自:http://blog.csdn.net/studyzy/article/details/4303759 以前我们要将一个表中的数据导出为脚本,那么只有在网上找一个导出数据的Script,然 ...