HQL查询及语法

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()结合更普遍)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值