hibernate查询排序
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查询排序的更多相关文章
- Hibernate 查询方式(HQL/QBC/QBE)汇总
作为老牌的 ORM 框架,Hibernate 在推动数据库持久化层所做出的贡献有目共睹. 它所提供的数据查询方式也越来越丰富,从 SQL 到自创的 HQL,再到面向对象的标准化查询. 虽然查询方式有点 ...
- Hibernate查询
HIbernate查询 使用get方法 使用get方法通过持久类名和ID号查找一个对象Stu instance = (Stu) getsession() .get("com.lovo.po. ...
- (十)Hibernate 查询方式
所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:Hibernate 查询方式简介 1,导航对象图查询方式: 2 ...
- Hibernate查询以及优化策略04
一. HQL查询 1. HQL(hibernate query language)单表查询 1.1 准备项目 创建项目: hinernate-03-query 引入jar,同前一个项目 复制实体(订单 ...
- Hibernate学习10——Hibernate 查询方式
本章主要是以查询Student的例子: Student.java: package com.cy.model; public class Student { private int id; priva ...
- Hibernate学习笔记(五)—— Hibernate查询方式
一.对象图导航查询 对象图导航查询方式是根据已经加载的对象,导航到他的关联对象.它利用类与类之间的关系来查询对象.比如要查找一个联系人对应的客户,就可以由联系人对象自动导航找到联系人所属的客户对象.当 ...
- java之hibernate之hibernate查询
这篇主要简单间接 hibernate查询 1.数据库操作中最重要的是查询,Hibernate提供了多种查询方式来帮助程序员快速实现查询功能. 有hql,本地sql查询,Criteria查询,examp ...
- 三大框架 之 Hibernate查询(一对多、多对多、查询关系)
目录 一对多 表之间关系 表之间关系建表原则 一对多关系配置 建立表 建立ORM 添加配置文件 在hibernate.cfg.xml中的标签里,添加核心配置文件 引入工具类 编写测试类 级联操作 什么 ...
- Hibernate 查询MatchMode的四种模式
Hibernate 查询MatchMode的四种模式 MatchMode.START:字符串在最前面的位置.相当于"like 'key%'" MatchMode.END:字符串在最 ...
随机推荐
- cream 的qsqrt 及其原理
首先,是creamk 的qsort: float Q_rsqrt( float number ) { long i; float x2, y; const float threehalfs = 1.5 ...
- [TCO2013]Block3Checkers
题意:一个网格上有一些障碍和$3$个在网格边界上的棋子,你要添加一些障碍使得没有两个棋子四连通,问最少添加多少个障碍 官方题解——一张图教你做人... 三个棋子将网格边界分成三段,添加障碍后网格中一定 ...
- bzoj 4602: [Sdoi2016]齿轮
4602: [Sdoi2016]齿轮 Description 现有一个传动系统,包含了N个组合齿轮和M个链条.每一个链条连接了两个组合齿轮u和v,并提供了一个传动比x : y.即如果只考虑这两个组合 ...
- [转]MySQL与Oracle的语法区别详细对比
Oracle和mysql的一些简单命令对比 1) SQL> select to_char(sysdate,'yyyy-mm-dd') from dual; SQL> select to_c ...
- iOS 常用工具库LFKit功能介绍
简介:LFKit包含了平时常用的category,封装的常用组件,一些工具类. 需要LFKit中所有自定义控件的pod 'LFKit/Component' 需要LFKit中所有category的pod ...
- mysql锁机制整理
Auth: jinDate: 20140506 主要参考整理资料MYSQL性能调优与架构设计-第七章 MYSQL锁定机制http://www.cnblogs.com/ggjucheng/archive ...
- C# mvc 上传多个附件
<div class="col-xs-12 mcp-list-item" style="margin-top:20px"> <div clas ...
- Microsoft SQL Server 2012 Internals
http://blog.csdn.net/column/details/learnsqlserver2012.html
- 实现自动解析properties文件并装配到Bean
主要实现了,配置的属性就装配, 没有配置的属性不装配 思路: 1 . 通过反射获取类内部所有方法名称 2 . 获取perperties 的key集合 3 . 处理字符串,比较两个匹配,如果匹配成功就 ...
- ActionError,ActionMessage推荐
尽管Struts框架供给了管用的失常处理机制,但不能保证处理所有的讹谬,这时Struts框架会把讹谬抛给Web容器,在默认情形下Web容器会向用户博览器直接归来原始消息.万一想避免直接让用户看到这些原 ...