首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

hibernate范例简析-hibernate_hql(三)

2012-09-20 
hibernate实例简析-hibernate_hql(三)1、对象导航查询,在hql中采用 . 进行导航【重要】?参见:ObjectNavQueryT

hibernate实例简析-hibernate_hql(三)

1、对象导航查询,在hql中采用 . 进行导航【重要】
?参见:ObjectNavQueryTest.java

List students = session.createQuery("select s.name from Student s where s.classes.name like '%1%'").list();
???for (Iterator iter=students.iterator(); iter.hasNext();) {
????String name = (String)iter.next();
????System.out.println(name);
???}

?

2、外置命名查询
?* 在映射文件中采用<query>标签来定义hql
?* 在程序中采用session.getNamedQuery()方法得到hql查询串
?参见:Student.hbm.xml、NameQueryTest.java

List students = session.getNamedQuery("searchStudents")
????????.setParameter(0, 10)
????????.list();
???for (Iterator iter=students.iterator(); iter.hasNext();) {
????Student student = (Student)iter.next();
????System.out.println(student.getName());
???}

?

<hibernate-mapping>
?<class name="com.bjsxt.hibernate.Student" table="t_student">
??<id name="id">
???<generator column="classesid"/>
??<filter name="filtertest" condition="id &lt; :myid"/>
?</class>
?
?<query name="searchStudents">
??<![CDATA[
???SELECT s FROM Student s where s.id<?
??]]>
?</query>
?
?<filter-def name="filtertest">
??<filter-param name="myid" type="integer"/>
?</filter-def>?
</hibernate-mapping>

?

?

3、连接查询【重要】
?* 内连
?* 外连接(左连接/右连接)?
?参见:JoinQueryTest.java

List students = session.createQuery("select c.name, s.name from Student s inner join s.classes c").list();
???for (Iterator iter=students.iterator(); iter.hasNext();) {
????Object[] obj = (Object[])iter.next();
????System.out.println(obj[0] + "," + obj[1]);
???}

===

List students = session.createQuery("select c.name, s.name from Classes c left join c.students s").list();
???for (Iterator iter=students.iterator(); iter.hasNext();) {
????Object[] obj = (Object[])iter.next();
????System.out.println(obj[0] + "," + obj[1]);
???}

===

List students = session.createQuery("select c.name, s.name from Classes c right join c.students s").list();
???for (Iterator iter=students.iterator(); iter.hasNext();) {
????Object[] obj = (Object[])iter.next();
????System.out.println(obj[0] + "," + obj[1]);
???}

4、

for(int i=0; i<10; i++){
????
?????Classes classes = new Classes();
?????classes.setName("班级"+i);
?????session.save(classes);
?????
?????for(int j=0; j<10; j++){
??????Student student = new Student();
??????student.setName("班级"+i+"的学生"+j);
??????student.setCreateTime(randomDate("2008-01-01","2008-03-01"));
??????
??????//在内存中建立由student指向classes的引用
??????student.setClasses(classes);
??????session.save(student);
?????}
????}
????
????for(int i=0; i<5; i++){
?????Classes classes = new Classes();
?????classes.setName("无学生班级"+i);
?????session.save(classes);
????}
????
????for(int i=0; i<10; i++){
?????Student student = new Student();
?????student.setName("无业游民"+i);
?????session.save(student);
????}

热点排行