使用sort属性,我们可以通过在取回结果集后在内存中进行排序,然后返回一个经过排序的结果集合
数据库结构:
create table teamSort (id varchar(32),teamname varchar(32));
create table studentSort (name varchar(32),team_id varchar(32));
insert into teamSort values("1","team1");
insert into studentSort values("a","1");
insert into studentSort values("b","1");
insert into studentSort values("c","1");
pojo: student部分采用set集合,无实体类
package Collection.Sort;
import java.util.Set;
public class Team ...{
private String id;
private String teamname;
private Set students;
public String getId() ...{
return id;
}
public void setId(String id) ...{
this.id = id;
}
public String getTeamname() ...{
return teamname;
}
public void setTeamname(String teamname) ...{
this.teamname = teamname;
}
public Set getStudents() ...{
return students;
}
public void setStudents(Set students) ...{
this.students = students;
}
}
Team.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="Collection.Sort.Team" table="teamSort" >
<id name="id" unsaved-value="null">
<generator class="uuid.hex"></generator>
</id>
<property name="teamname" type="string" column="teamname"></property>
<!-- 以element内容升序返回 -->
<set name="students" table="studentSort" cascade="all" sort="natural">
<key column="team_id"></key>
<element type="string" column="name"></element>
</set>
</class>
</hibernate-mapping>
Hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="connection.username">root</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/schoolproject?characterEncoding=gb2312&useUnicode=true
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="myeclipse.connection.profile">mysql</property>
<property name="connection.password">1234</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.show_sql">true</property>
<property name="current_session_context_class">thread</property>
<property name="jdbc.batch_size">15</property>
<mapping resource="Collection/Sort/Team.hbm.xml" />
</session-factory>
</hibernate-configuration> 测试代码:
package Collection.Sort;
import java.io.File;
import java.util.Iterator;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class Test ...{
public static void main(String[] args) ...{
String filePath=System.getProperty("user.dir")+File.separator+"src/Collection/Sort"+File.separator+"hibernate.cfg.xml";
File file=new File(filePath);
System.out.println(filePath);
SessionFactory sessionFactory=new Configuration().configure(file).buildSessionFactory();
Session session=sessionFactory.openSession();
Transaction t=session.beginTransaction();
Team team=(Team)session.createQuery("from Team t where t.teamname='team1'").uniqueResult();
Set result=team.getStudents();
Iterator iter=result.iterator();
while(iter.hasNext())...{
System.out.println(iter.next());
}
t.commit();
}
}
运行结果:
Hibernate: select team0_.id as id0_, team0_.teamname as teamname0_ from teamSort team0_ where team0_.teamname='team1'
Hibernate: select students0_.team_id as team1_0_, students0_.name as name0_ from studentSort students0_ where students0_.team_id=?
a
b
c
sort="natural"默认进行升序排列,如果我们想改成降序,则需要写一个类实现Comparator接口如下:
package Collection.Sort;
import java.util.Comparator;
public class Compare implements Comparator ...{
public int compare(Object o1, Object o2) ...{
String s1=(String)o1;
String s2=(String)o2;
if(s1.equals(s2))...{
return 0;
}
else if(s1.compareTo(s2)>0)...{
return -1;
}
else...{
return 1;
}
}
}
然后更改Team.hbm.xml 配置sort属性
sort="Collection.Sort.Compare"
重新执行测试代码,结果如下:
Hibernate: select team0_.id as id0_, team0_.teamname as teamname0_ from teamSort team0_ where team0_.teamname='team1'
Hibernate: select students0_.team_id as team1_0_, students0_.name as name0_ from studentSort students0_ where students0_.team_id=?
c
b
a
注意:如果有Student实体类,并set中使用one-to-many或many-to-many标签,则比如使用sort="一个实现comparator接口的类"这样排序
分享到:
相关推荐
14.5.2 在内存中对集合排序 14.6 映射组件类型集合 14.7 小结 14.8 思考题 第15章 映射实体关联关系 15.1 映射一对一关联 15.1.1 按照外键映射 15.1.2 按照主键映射 15.2 映射单向多对多关联 ...
14.5.2 在内存中对集合排序 14.6 映射组件类型集合 14.7 小结 14.8 思考题 第15章 映射实体关联关系 15.1 映射一对一关联 15.1.1 按照外键映射 15.1.2 按照主键映射 15.2 映射单向多对多关联 ...
14.5.2 在内存中对集合排序 14.6 映射组件类型集合 14.7 小结 14.8 思考题 第15章 映射实体关联关系 15.1 映射一对一关联 15.1.1 按照外键映射 15.1.2 按照主键映射 15.2 映射单向多对多关联 ...
14.5.2 在内存中对集合排序 14.6 映射组件类型集合 14.7 小结 14.8 思考题 第15章 映射实体关联关系 15.1 映射一对一关联 15.1.1 按照外键映射 15.1.2 按照主键映射 15.2 映射单向多对多关联 ...
* 集合类:ArrayList、LinkedList、HashSet 等,各自的特点、实现和应用场景。 * 内存溢出:概念、原因、解决方法等。 * == 和 equals 的区别:概念、应用场景和实现。 * hashCode 方法的作用:概念、应用场景和实现...
25. 集合类都有哪些?主要方法? 14 26. 简述逻辑操作(&,|,^)与条件操作(&&,||)的区别。 14 27. XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 14 28. JSP和Servlet有哪些相同点和不同点...
4,java 进阶模块,在java基础内容上进一步详细介绍了多线程,集合框架,以及JVM内存管理,并收录java中容易使人迷惑的谜题内容。 5,数据库模块,完整详尽的介绍了数据库的创建、增删改、检索、常用函数、索引与...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 17.介绍一下Hibernate的二级缓存 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message 属性, ...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 135 17.介绍一下Hibernate的二级缓存 135 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...
16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...
排序算法、动态规划、递归、回溯法、贪心算法等。 二、Java Java 基础概念 基本概念、面相对象、关键字、基本数据类型与运算、字符串与数组、异常处理、Object通用方法 Java 集合框架 数据结构 & 源码分析:...