Hibernate中HQL语句的使用(一)

2014-11-24 11:30:18 · 作者: · 浏览: 12
本文主要使用一些测试方法来讲解HQL的具体应用
采用一对多的关系映射举例,两个类Dept{did,dname,emps},Emp{dept,eid,ename}
Dept.hbm.xml中
[ html]
Emp.hbm.xml中
[html]
from Emp where eid<
]]>
测试类:
[java]
public class TestHQL {
/**
* Hibernate生成关系模型
*/
@Test
public void test00DDL(){
Configuration cfg = new Configuration().configure();
SchemaExport export = new SchemaExport(cfg);
export.create(true, true);
}
@Test
public void test01InitData(){
//10个部门,30个员工
Session session = HibernateUtils.getSession();
for(int i=1;i<=10;i++){
Dept dept = new Dept();
dept.setDname("部门"+i);
Set emps = new HashSet();
for(int j=1;j<=8;j++){
Emp emp = new Emp();
emp.setEname("员工_"+i+"_"+j);
emp.setDept(dept);
emps.add(emp);
}
dept.setEmps(emps);
session.save(dept);
session.clear();
}
session.beginTransaction().commit();
HibernateUtils.close(session);
}
/**
* 查询属性
* 查询一个属性,集合中的数据类型为String(对于dname属性),
* 如果对于did属性,则是Integer类型
*/
@Test
public void test02(){
Session session = HibernateUtils.getSession();
String hql = "select dname from Dept";
Query query = session.createQuery(hql);
List dnames = query.list();
for (String dname : dnames) {
System.out.println(dname);
}
HibernateUtils.close(session);
}
/**
* 查询多个属性,集合中数据的类型为Object[]
*/
@Test
public void test03(){
Session session = HibernateUtils.getSession();
String hql = "select did,dname from Dept";
Query query = session.createQuery(hql);
List dnames = query.list();
for (Object[] o : dnames) {
System.out.println(o[0]+":"+o[1]);
}
HibernateUtils.close(session);
}
/**
* 查询多个属性,动态构建一个对象,Dept类必须要有new Dept(dname,did)构造器
* 和无参构造器
*/
@Test
public void test04(){
Session session = HibernateUtils.getSession();
String hql = "select new Dept(did,dname) from Dept";
Query query = session.createQuery(hql);
List depts = query.list();
for(Dept dept:depts){
System.out.println(dept.getDname());
}
HibernateUtils.close(session);
}
/**
* 简单对象查询
* foreach迭代,如果迭代一个空值,如果从该对象获得方法,不会出现空指针异常
* 内部采用的是iterator,当it.hasNext()才进行。而如果是空值,it.hasNext()为false
* 不会执行该对象的方法,因此不会出现空指针异常。
*/
@Test
public void test05(){
Session session = HibernateUtils.getSession();
String hql = "select d from Dept d";
Query query = session.createQuery(hql);
List depts = query.list();
for(Dept dept:depts){
System.out.println(dept.getDname()+","+dept.getDid());
}
HibernateUtils.close(session);
}
/**
* 对象查询,条件查询