Hibernate查询结果排序

1.对于一般的查询排序,可以使用HQL语句,例:

Student类有两个属性id和name,对应表中的字段分别为id和NName;查询表中的所有记录并按name升序排序

 Query q=session.createQuery("from Student order by name asc");
              List<Student> li=(List<Student>)q.list();
              for (int i = 0; i < li.size(); i++) {
				System.out.println(li.get(i).getName());
			}
注意:此处的"name"为Student的属性,也可为NName字段名。"order by name asc"   Hibernate会按照Student.hbm.xml映射文件将其转换为属性对应的字段名NName。

2.在查询对象的Set、Map等属性时也可以对其进行排序,可以分为两个层次:数据库排序内存排序

(1)数据库排序指的就是由数据库将查询的记录排好序,然后再返回给我们,即排序由数据库完成。

在<set>等元素中有一个order-by属性可以设置排序规则,例:(以hibernate映射Map中的Team和Student为例,Team与Student为一对多关联关系)

只需在Team.hbm.xml的<map>中设置order-by的属性值即可:

	<class name="bean.Team" table="team">
		<id name="id" column="id" type="long">
			<generator class="increment"></generator>
		</id>
		<property name="name" column="name" type="string"></property>
		<map name="students" table="students" cascade="save-update" order-by="name asc">
			<key column="team_id"></key>
			<index column="cardID" type="long"></index>
		  <one-to-many class="bean.Student"/>
		</map>
	</class>
对于一对多中的<set>、<List>等也是如此。

注意:(1)此处的"name"是数据库里的字段而不是类的属性。

            (2)对于多对多映射关系,order-by中指定的字段是连接表中的字段而不是与其关联的表的字段,以hibernate多对多双向关联中的Student和Course为例:

            如在Student.hbm.xml中的<set>中设置order-by属性指定排序规则:

      <set name="courses" table="students_courses" cascade="save-update" order-by="course_id desc" > 
            连接表为students_courses,course_id为连接表中的字段(即连接表参照course表id的外键)


(2)内存排序指的就是从数据库将数据查出放入到内存中后再由Hibernate按照指定的排序规则进行排序。

 内存排序:有两个属性值可以直接使用,分别是unsorted(不排序)以及natural(自然排序,即升序),此外,我们还可以自定义排序规则,方式是定义一个类,让其实现Comparator接口,并且实现该接口中的compare方法,在该方法中实现排序规则即可。然后将该自定义排序规则的类名作为sort的属性值即可。

例:在Team.hbm.xml中的<map>设定sort属性值指定排序规则为自然排序:

<map name="students" table="students" cascade="save-update" sort="natural">
 自定义排序规则类MyComparator(实现Comparator接口),然后作为sort的属性值即可:
<map name="students" table="students" cascade="save-update" sort="hibernate.MyComparator">


转载请注明出处:http://blog.csdn.net/jialinqiang/article/details/8700713

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值