Hibernate:HQL/QBC查询语言比较的用法(1)

原创 2005年12月25日 19:41:00
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); 

Hibernate QBC与HQL优缺点

QBC 全称:Query By Criteria HQL 全称:Hibernate Query Language HQL优点:与sql相近,可读性好,功能强大,效率高。 HQL缺点:字符串形式,...
  • dongkai_it
  • dongkai_it
  • 2015年06月29日 20:53
  • 4882

Hibernate —— HQL与QBC的区别

Hibernate主要有如下几种查询方式: 导航对象图检索方式 根据己经加载的对象,导航到其他对象。   OID检索方式 按照对象的OID来检索对象。   HQL检索方式 使用面向对象的HQL查询语言...
  • u012045597
  • u012045597
  • 2013年11月12日 21:50
  • 2119

Hibernate:HQL/QBC查询语言比较的用法

Hibernate:HQL/QBC查询语言比较的用法 ...
  • happyanyday
  • happyanyday
  • 2006年04月29日 10:23
  • 1147

Hibernate通常是三种:hql查询,QBC查询和QBE查询:

通常使用的Hibernate通常是三种:hql查询,QBC查询和QBE查询: 1、QBE(Qurey By Example)检索方式 QBE是最简单的,但是功能也是最弱的,QBE的功能不是特别强大,仅...
  • u010741376
  • u010741376
  • 2016年06月08日 16:18
  • 945

Java程序员从笨鸟到菜鸟之(六十四)细谈Hibernate(十五)HQL与QBC查询方式详解

首先来看一下,hibernate提供的几种检索方式: 1.导航对象图检索方式 :根据已经加载的对象,导航到其他对象。例如,对于已经加载的Customer对象,调用它的getOrders().iter...
  • csh624366188
  • csh624366188
  • 2012年05月31日 13:42
  • 8976

Hibernate深入理解----Hibernate 检索方式(HQL,QBC,本地SQL)

参考代码下载github:https://github.com/changwensir/java-ee/tree/master/hibernate4 •Hibernate 提供了以下几种检索...
  • oChangWen
  • oChangWen
  • 2016年09月20日 22:47
  • 1529

Hibernate的HQL,QBC 查询语言(包括多表联合查询join)

引用链接:http://takeme.iteye.com/blog/1722522   参考链接: in和not in用法:http://blog.csdn.net/shiqidide/art...
  • xn_28
  • xn_28
  • 2017年04月24日 03:26
  • 2639

hibernate的HQL查询语言总结

HQL是Hibernate Query Language的缩写,HQL的语法很像SQL的语法,但HQL是一种面向对象的查询语言。因此,SQL的操作对象是数据表和列等数据对象,而HQL的操作对象是类、实...
  • tuke_tuke
  • tuke_tuke
  • 2015年11月11日 12:41
  • 2258

Hibernate 的HQL,QBC 查询语言

1.HQL:(Hibernate Query Language) 是面向对象的查询语言  1.实体查询  Java代码   public void testQueryAl...
  • lcczzu
  • lcczzu
  • 2015年07月03日 16:09
  • 93

hibernate高级查询技术之“HQL和QBC”的区别

作者是一名hibernate初学者,接触到HQL和QBC两种高级数据库查询方式,为了更深刻的理解两种方法的区别,本文收集了一个些概念和大牛们的见解。希望分享给大家。 首先, ...
  • langjian2012
  • langjian2012
  • 2014年09月07日 19:42
  • 1474
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate:HQL/QBC查询语言比较的用法(1)
举报原因:
原因补充:

(最多只允许输入30个字)