一、在hibernate_hql项目中,继续上一个博文
二、创建测试类
package com.bjsxt.hibernate; import java.util.Iterator; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import junit.framework.TestCase; public class SimplePropertyQueryTest extends TestCase { public void testQuery1(){ Session session=null; try{ session=HibernateUtils.getSession(); session.beginTransaction(); List student=session.createQuery("select name from Student").list(); Iterator iterator=student.iterator(); while(iterator.hasNext()){ //查询方法返回结果集属性列表,元素的类型和实体类中的相应属性类型一致 String name=(String)iterator.next(); System.out.println(name); } session.getTransaction().commit(); }catch(Exception e){ e.printStackTrace(); }finally{ session.getTransaction().rollback(); } } }
三、第二个测试方法
public void testQuery2(){ Session session=null; try{ session=HibernateUtils.getSession(); session.beginTransaction(); //查询多个属性,其集合类型是数组 //数组元素的类型和对应的属性在实体类中的类型是一致 //数组的长度取决与select中属性的个数 List student=session.createQuery("select id,name from Student").list(); Iterator iterator=student.iterator(); while(iterator.hasNext()){ // Object[] obj=(Object[])iterator.next(); System.out.println(obj[0]+","+obj[1]); } session.getTransaction().commit(); }catch(Exception e){ e.printStackTrace(); }finally{ session.getTransaction().rollback(); } }
四、第4个测试方式:以上的两个测试方式,单一 属性返回值为实体类属性的类型
多个属性查询返回值为Object[]也就是对象数组类型的。可是这样的类型,还要根据实体属性的类型来一一对照,显然很麻烦。可是有没有方法,使得返回值为Studnet实体类的对象类型呢?
1、Student.class类如下:
package com.bjsxt.hibernate; import java.util.Date; public class Student { //根据实体类的设计原则,还必须提供一个空的构造 函数 public Student(){ } //还要设计一个带参数,一个为id,另一个为name public Student(int id,String name){ this.id=id; this.name=name;HQL实现单一 <wbr>属性与多个属性的查询 } private int id; private String name; private Date createTime; private Classes classes; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Classes getClasses() { return classes; } public void setClasses(Classes classes) { this.classes = classes; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } } 2、测试方法为: public void testLoad3(){ Session session=null; try{ session=HibernateUtils.getSession(); session.beginTransaction(); // 如果认为返回对象数组不够对象化,可以采用HQL动态实例化Studnt对象 //此时list为student对象集合 List HQL实现单一 <wbr>属性与多个属性的查询students=session.createQuery("select new StudentHQL实现单一 <wbr>属性与多个属性的查询(id,name) from Student").list(); Iterator iterator=students.iterator(); while(iterator.hasNext()){HQL实现单一 <wbr>属性与多个属性的查询 Student student=HQL实现单一 <wbr>属性与多个属性的查询(Student)iterator.next(); System.out.println(student.getId()+","+student.getName()); } session.getTransaction().commit(); }catch(Exception e){ e.printStackTrace(); session.getTransaction().rollback(); }finally{ HibernateUtils.closeSession(session); } }
四、使用别名的测试类
/* * 在HQL 中也可以使用别名的 */ public void testQuery4(){ Session session=null; try{ session=HibernateUtils.getSession(); session.beginTransaction(); //查询多个属性,其集合类型是数组 //数组元素的类型和对应的属性在实体类中的类型是一致 //数组的长度取决与select中属性的个数 //s为Studnet的别名哦! List student=session.createQuery("select s.id,s.name from Student s").list(); Iterator iterator=student.iterator(); while(iterator.hasNext()){ // Object[] obj=(Object[])iterator.next(); System.out.println(obj[0]+","+obj[1]); } session.getTransaction().commit(); }catch(Exception e){ e.printStackTrace(); }finally{ session.getTransaction().rollback(); } }
五、
public void testQuery5(){ Session session=null; try{ session=HibernateUtils.getSession(); session.beginTransaction(); //查询多个属性,其集合类型是数组 //数组元素的类型和对应的属性在实体类中的类型是一致 //数组的长度取决与select中属性的个数 //s为Studnet的别名哦!可以使用as命名别名 List student=session.createQuery("select s.id,s.name from Student as s").list(); Iterator iterator=student.iterator(); while(iterator.hasNext()){ // Object[] obj=(Object[])iterator.next(); System.out.println(obj[0]+","+obj[1]); } session.getTransaction().commit(); }catch(Exception e){ e.printStackTrace(); }finally{ session.getTransaction().rollback(); } }