(原创)Hibernate学生选课,实现课程按照学生人数进行排序的方法
2010-03-01 15:17
726 查看
声明:编程新手,如有错漏,敬请指出。谢谢。
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
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
相关文章推荐
- Python实现字典按照value进行排序的方法分析
- php和mysql采用utf-8编码时实现按照一个文本字段的首字母的拼音顺序进行排序的方法
- 实现从一个ListBox向另一个ListBox中移动选中项,并按照value进行排序
- PHP实现根据数组某个键值大小进行排序的方法
- php实现按照权重随机排序数据的方法
- php实现按照权重随机排序数据的方法
- 我自己编写的实现的对一些列数字的索引进行排序的类 (注意:不是对数字集合进行排序,而是对数字集合的索引按照数字值进行排序)
- Java实现按照大小写字母顺序排序的方法
- 数据结构之链表的实现-------C++课程设计-----学生选课管理系统
- PHP实现二维数组按某列进行排序的方法
- js实现图片放大缩小功能后进行复杂排序的方法
- Java编程之TreeSet排序两种解决方法(1)元素自身具备比较功能,元素需要实现Comparable接口覆盖compare(2)创建根据自定义Person类的name进行排序的Comparator
- PHP读取数据库并按照中文名称进行排序实现代码
- TreeSet() 类逆向排序(实现compare()方法以便按正常顺序的逆向进行操作)。
- iOS实现联系人按照首字母进行排序的实例
- [导入]实现SQL语句中,按照in 中的顺序排序的方法
- 转:C++中实现对map按照value值进行排序
- Python实现二维数组按照某行或列排序的方法
- C++中实现对map按照value值进行排序