(原创)Hibernate学生选课,实现课程按照学生人数进行排序的方法

声明:编程新手,如有错漏,敬请指出。谢谢。


POJO:Student

package com.test;
import java.util.HashSet;
import java.util.Set;
public class Student
{
    private int sid;
    private String sname;
    private String sage;

    private Set<Course> course=new HashSet<Course>();

    public Student()
    {
    }
// getter/setter...
}


POJO:Course

package com.test;

import java.util.HashSet;

import java.util.Set;

public class Course

{
    private int cid;
    private String cname;
    private Set<Student> student=new HashSet<Student>();

    public Course() {}
//getter/setter...
   
}


Student.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">

<hibernate-mapping>


    <class name="com.test.Student" table="student" >

        <id name="sid" >
            <column name="sid" sql-type="int(10)" not-null="true"/>
            <generator class="native"/>
        </id>

        <property name="sname">
            <column name="sname"/>
        </property>

        <property name="sage">
            <column name="sage"/>
        </property>
       

        <set access="property" name="course"
            table="student_course_link" batch-size="10" fetch="select"
            lazy="true" cascade="save-update" inverse="true"
            >
            <key column="sid"/>
            <many-to-many class="com.test.Course" column="cid"/>
        </set>
    </class>

</hibernate-mapping>

Course.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">

<hibernate-mapping>


    <class name="com.test.Course" table="course" >

        <id name="cid"  >
            <column name="cid" sql-type="int(10)" not-null="true" />
            <generator class="native"/>
        </id>

        <property name="cname">
            <column name="cname"/>
        </property>
       

        <set access="property" name="student" batch-size="10" fetch="select"
            table="student_course_link" lazy="true" cascade="save-update"
            inverse="false">
            <key column="cid"/>
            <many-to-many class="com.test.Student" column="sid"/>
        </set>
  
    </class>

</hibernate-mapping>

数据库三个表,student,course,student_course_link(中间表):

DROP TABLE IF EXISTS `java2`.`student`;
CREATE TABLE  `java2`.`student` (
  `sid` int(10) unsigned NOT NULL auto_increment,
  `sname` varchar(16) default NULL,
  `sage` varchar(16) default NULL,
  PRIMARY KEY  (`sid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;



DROP TABLE IF EXISTS `java2`.`course`;
CREATE TABLE  `java2`.`course` (
  `cid` int(10) unsigned NOT NULL auto_increment,
  `cname` varchar(16) default NULL,
  PRIMARY KEY  (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;



DROP TABLE IF EXISTS `java2`.`student_course_link`;
CREATE TABLE  `java2`.`student_course_link` (
  `sid` int(10) NOT NULL,
  `cid` int(10) NOT NULL,
  PRIMARY KEY  (`sid`,`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


我们需要一个自定义Comparator:

package com.test;

import java.util.Comparator;



public final class HotCourseComparator implements Comparator {


    public int compare(Object arg0, Object arg1) {
        Course c1=(Course)arg0;
        Course c2=(Course)arg1;
       
        return c2.getStudent().size()-c1.getStudent().size();  // 按照选这门课的人数排序。
    }

}

测试类:


public class TestManyToMany
{

     
      public void rankCourse() {
          Session session=HibernateUtil.getSessionFactory().getCurrentSession();
          session.beginTransaction();
          Query query=session.createQuery("from Course");
          List l=query.list();
          Collections.sort(l,new HotCourseComparator());   //这里声明使用我们自定义的Comparator
          for(int j=0;j<l.size();j++) {
              Course c=(Course)l.get(j);
              int snum=c.getStudent().size();
              System.out.println(c.getCname()+" has "+snum+" students");
          }

     }

      public static void main(String[] args)
    {
        TestManyToMany t = new TestManyToMany();


        t.rankCourse();

    }                 

}
运行结果:
C# has 4 students
Ruby on Rails has 4 students
PHP has 3 students
JAVA has 2 students
C has 2 students
PL/SQL has 2 students
MATLAB has 2 students
C++ has 1 students
Heskell has 1 students
Python has 1 students

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值