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(); } } }
@H_301_0@ 三、第二个测试方法 @H_301_0@
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(); } }
@H_301_0@
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); } }
@H_301_0@ 四、使用别名的测试类 @H_301_0@
/* * 在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(); } }
@H_301_0@ 五、 @H_301_0@
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(); } }