中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > 综合文章
Hibernate:HQL/QBC查询语言比较的用法
作者:cucumalo 时间:2006-09-20 07:59 出处:JR 责编:月夜寒箫
              摘要:Hibernate:HQL/QBC查询语言比较的用法

Hib的检索方式

1、导航对象图检索方式。通过已经加载的对象,调用.iterator()方法可以得到order对象如果是首次执行此方法,Hib会从数据库加载关联的order对象,否则就从缓存中得到。

2、OID检索方式。通过session的get,load方法知道了OID的情况下可以使用

3、HQL检索方式。使用面向对象的HQL查询语句session的find方法利用HQL来查询

4、QBC检索方式。利用QBCAPI来检索它是封装了基于字符串的查询语句

5、本地的SQL检索方式。使用本地数据库的SQL查询语句Hib会负责把检索到的JDBC结果集映射为持久化对象图。

五种检索方式的使用场合和特点:

HQL : 是面向对象的查询语言,同SQL有些相似是Hib中最常用的方式。

查询设定各种查询条件。

支持投影查询,检索出对象的部分属性。

支持分页查询,允许使用having和group by

提供内制的聚集函数,sum(),min(),max()

能调用用户的自定义SQL

支持子查询,嵌入式查询

支持动态绑定参数

建议使用Query接口替换session的find方法。

 

Query Q = session.createQuery
            ("from customer as c where c.name
            = :customerName" +
            "and c.age = :customerAge");
            query.setString
            ("customerName" , "tom");
            query.setInteger
            ("customerAge" , "21");
            list result = query.list();

QBC : QBCAPI提供了另一种方式,主要是Criteria接口、Criterion接口和Expression类

 

Criteria criteria =
            session.createCriteria(customer.class);
            Criterion criterion1 =
            Expression.like("name","t%");
            Criterion criterion2 =
            Expression.eq("age",new Integer(21));
            Critera = criteria.add(criterion1) ;
            Critera = criteria.add(criterion2) ;
            list result = criteria.list();

或是:

 

list result = session.createCriteria(Customer.class).
            add(Expression.eq("this.name","tom")).list();

SQL :

采用HQL和QBC检索时,Hib生成SQL语句适用所有数据库。

 

Query query  =
            session.createSQLQuery("select
            {
            c.*
            }
            from customers c where c.name
            like : customername " + "and c.age =
            :customerage","c",customer.calss);
            query.setString("customername","tom");
            query.setInteger("customerage","21");
            list result = query.list();
            /////////////多态查询
            HQL :session.createQuery("from employee");
            QBC :session.createCriteria(employee.class);
            HQL : session.createQuery("from hourlyEmployee");
            QBC : session.createCriteria(hourlyEmployee.class);

下面的HQL查询语句将检索出所有的持久化对象:

 

from java.lang.Object ;
            from java.io.serializable ;
            ////////////查询的排序

1、查询结果按照客户姓名升序排列:

 

HQL :
            Query query = session.createQuery
            ("from customer c order by c.name");
            QBC :
            Criteria criteria =
            session.createCriteria(customer.class);
            criteria.addOrder(order.asc("name"));
            HQL :
            Query query = session.createQuery
            ("from customer c order
            by c.name asc , c.age desc");
            QBC :
            Criteria criteria =
            session.createCriteria
            (customer.class);
            criteria.addOrder
            (order.asc ("name"));
            criteria.addOrder
            (order.desc("age"));
            import net.sf.hibernate.pression.Order
            import mypack.Order
            ...........
            Criteria criteria =
            session.createCritria
            (mypack.Order.class);
            criteria.addOrder
            (net.sf.hibernate.Order.asc("name"));
            ///////////HQL语句的参数绑定Query接口
            提供了绑定各种Hib映射类型的方法。
            setBinary()
            setString()
            setBoolean()
            setByte()
            setCalendar()
            setCharacter()
            setDate()
            setDouble()
            setText()
            setTime()
            setTimestamp()
            setEntity()
            //把参数与一个持久化类的事例绑定
            lsit result = session.createQuery
            ("from order o where o.customer =
            :customer").setEntity
            ("customer" , customer).list ;
            setParameter()
            //绑定任意类型的参数
            setProperties()
            //把命名参数与一个对象的属性值绑定
            Query query = session.createQuery
            ("from customer c where c.name =:
            name " + "and c.age =:age" );
            Query.setProperties(customer);
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有