Hibernate内存排序

内存排序
内存排序和数据库排序唯一的不同就是在配置文件中使用sort属性而不是order-by属性
他有三个属性值(unsorted,natural),其中natural指的是按照自然的升序排序,第三个
属性值是我们自己定义 的排序规则类,该规则类通过实现Comparator接口,并且实现
该接口中的Compare方法,在该方法中定义排序规则即可。然后将该自定义的排序规则
的类名作为sort的属性值即可.

具体参考:

Team.java

 

package com.fgh.hibernate; import java.util.Set; public class Team { private String id; private String teamName; private Set<Student> 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<Student> getStudents() { return students; } public void setStudents(Set<Student> students) { this.students = students; } }
Student.java

 

 

package com.fgh.hibernate; /** * 一对一双向关联 * * @author fgh * */ public class Student { private String id; private String name; private String idCard; private int age; private Team team; public Team getTeam() { return team; } public void setTeam(Team team) { this.team = team; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getIdCard() { return idCard; } public void setIdCard(String idCard) { this.idCard = idCard; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
Team.hbm.xml

 

 

<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.fgh.hibernate.Team" table="team"> <id name="id" column="id" type="string"> <generator class="uuid"></generator> </id> <property name="teamName" column="teamName" type="string"></property> <!-- 这里sort属性设置我们自己的排序规则 --> <set name="students" lazy="false" cascade="all" inverse="true" fetch="select" sort="com.fgh.hibernate.MyComparator"> <key column="team_id"></key> <one-to-many class="com.fgh.hibernate.Student" /> </set> </class> </hibernate-mapping>
Student.hbm.xml

 

 

<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.fgh.hibernate.Student" table="student"> <id name="id" column="id" type="string"> <generator class="uuid"></generator> </id> <property name="name" column="name" type="string"></property> <property name="idCard" column="idcard" type="string"></property> <property name="age" column="age" type="integer"></property> <many-to-one name="team" class="com.fgh.hibernate.Team" column="team_id"> </many-to-one> </class> </hibernate-mapping>

自定义排序规则类:

MyComparator.java

 

package com.fgh.hibernate; import java.util.Comparator; /** * 自定义排序规则类 * * @author fgh * */ public class MyComparator implements Comparator<Student> { public int compare(Student s1, Student s2) { //如果两个对象相同,不排序 if (s1 == s2) { return 0; } int result = s1.getIdCard().compareToIgnoreCase(s2.getIdCard()); //如果cardId不同,按照cardId排序 if (result != 0) { //如果降序 return -result; return result; } //如果cardId相同,按照name排序 //如果降序 返回负值 return s1.getName().compareToIgnoreCase(s2.getName()); } }
测试类:

 

HIbernateTest.java

 

package com.fgh.hibernate; import java.util.HashSet; 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 HibernateTest { private static SessionFactory sessionFactory; static { try { sessionFactory = new Configuration().configure() .buildSessionFactory(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { // 先执行插入操作 有了数据才可以查询哦 // ------------begin-------------- Team team = new Team(); team.setTeamName("team1"); team.setStudents(new HashSet<Student>()); Student student = new Student(); student.setName("zhangsan"); student.setIdCard("aa"); student.setAge(20); Student student1 = new Student(); student1.setName("lisi"); student1.setIdCard("aa"); student1.setAge(21); Student student2 = new Student(); student2.setName("wangwu"); student2.setIdCard("ba"); student2.setAge(22); Student student3 = new Student(); student3.setName("xiaoqiang"); student3.setIdCard("bb"); student3.setAge(23); Student student4 = new Student(); student4.setName("xiaohong"); student4.setIdCard("dc"); student4.setAge(24); team.getStudents().add(student); team.getStudents().add(student1); team.getStudents().add(student2); team.getStudents().add(student3); team.getStudents().add(student4); student.setTeam(team); student1.setTeam(team); student2.setTeam(team); student3.setTeam(team); student4.setTeam(team); // -------------end------------ Session session = sessionFactory.openSession(); Transaction tx = null; try { tx = session.beginTransaction(); // 查询----bein-------- Team team2 = (Team) session.get(Team.class, "8a8ae4d934b2bfa10134b2bfa4a30001"); Set<Student> set = team2.getStudents(); for (Iterator<Student> iterator = set.iterator(); iterator .hasNext();) { System.out.println(iterator.next().getName()); } // --------------end---------- // 保存 // session.save(team); tx.commit(); } catch (Exception e) { e.printStackTrace(); if (null != tx) { tx.rollback(); } } finally { session.close(); } } } 打印sql:

 

 

Hibernate: select team0_.id as id1_0_, team0_.teamName as teamName1_0_ from team team0_ where team0_.id=? Hibernate: select students0_.team_id as team5_1_, students0_.id as id1_, students0_.id as id0_0_, students0_.name as name0_0_, students0_.idcard as idcard0_0_, students0_.age as age0_0_, students0_.team_id as team5_0_0_ from student students0_ where students0_.team_id=? lisi zhangsan wangwu xiaoqiang xiaohong
哦也,完成

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值