您的位置:首页 > 其它

HQL查询及语法

2008-09-07 16:09 295 查看
HQL:Hibernate Query Language


HQL是完全面向对象的查询语言,因此可以支持继承和多态等特征。


HQL查询依赖于Query类,每个Query实例对应一个查询对象,使用HQL查询按


如下步骤进行:


(1)获取Hibernate Session对象;


(2)编写HQL语句;


(3)以HQL语句作为参数,调用Session的createQuery方法创建查询对象;


(4)如果HQL语句包含参数,调用Query的setXxx方法为参数赋值;


(5)调用Query对象的list等方法遍历查询结果。


查询示例:


public class HqlQuery




...{




public static void main(String[] args) throws Exception ...{


HqlQuery mgr = new HqlQuery();


//调用查询方法


mgr.findPersons();


//调用第二个查询方法


mgr.findPersonByHappenDate();


HibernateUtil.sessionFactory.close();


}


//第一个查询方法




private void findPersons() ...{


//获得Hibernate Session


Session sess = HibernateUtil.currentSession();


//开始事务


Transaction tx = sess.beginTransaction();


//以HQL语句创建Query对象


//执行setString方法为HQL语句的参数赋值


//Query调用list方法访问查询的全部实例


List p1 = sess.createQuery("from Person p where o.myEvents.title = :


eventTitle").setString("eventTitle", "很普通事情").list();


//遍历查询的全部结果


for (Iterator pit = p1.iterator(); pit.haxNext(); )




...{


Person p = (Person)pit.next();


System.out.println(p.getName());


}


//提交事务


tx.commit();


HibernateUtil.closeSession();


}


//第二个查询方法




private void findPersonByHappenDate() throws Exception ...{


Session sess = HibernateUtil.currentSession();


Transaction tx = sess.beginTransaction();


//解析出Date对象


SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");


Date start = sdf.parse("2007-11-27");


System.out.println("系统开始通过日期查找人" + start);


//通过Session的createQuery方法创建Query对象


//设置参数


//返回结果集


List pl = sess.createQuery(


"from Person p where p.myEvents.happenDate between :firstDate


and :endDate")


.setDate("firstDate", start)


.setDate("endDate", new Date())


.list();


//遍历结果集


for (Iterator pit = pl.iterator(); pit.hasNext(); )




...{


Person p = (Person)pit.next();


System.out.println(p.getName());


}


tx.commit();


HibernateUtil.closeSession();


}


}




$下面介绍HQL语句的语法


1.from子句


from Person


表明从Person持久化类中选出全部的实例。


推荐:from Person as p




2.select子句


select p.name from Person as p


select p.name.firstName from Person as p


select new list(p.name, p.address) from Person as p


select new ClassTest(p.name, p.address) from Person as p (有前提)


select p.name as personName from Person as p


select new map(p.name as personName) from Person as p (与new map()结合更普遍)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: