注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Lable

........................................

 
 
 

日志

 
 

3_HQL实用技术  

2011-11-16 16:01:25|  分类: Hibernate |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

一、为什么使用HQL查询

       不需要再编写繁复的SQL语句,针对实体类及其属性进行查询

       查询结果是直接存放在List中的对象,不需要再次封装

       独立于数据库,对不同的数据库根据Hibernate dialect属性的配置自动生成不同的SQL语句

二、如何使用HQL

       得到Session

       编写HQL语句

       创建(获取)Query对象

       执行查询,得到结果

       解释:Query接口是HQL查询接口,它提供了各种的查询功能,通过Session的createQuery()方法创建Query,它包含了HQL查询语句

三、查询分类

·         实体查询

¨       语法: from 实体类名; (where   … )

       再where子句中,使用的运算符和sql一样,如:== <> < > >= <= between、not between、in、is、like

·         属性查询

¨       从符合条件的一条数据中获得指定的值 (实体类的别名.属性)

¨       获取示例:

String hql = “select u.password from User u where u.name=’admin’;

Query query = session.createQuery(hql);

List list = query.list();

Iterator it = list.iterator();  //使用Iterator从List中获取数据

If(it.hasNext()){

     System.out.println(it.next());

}

        注:可以封装属性,select (属性1,属性2,…). from User

            但必须在User类中增加一个以查询属性为参数的构造方法

·         参数绑定

¨       “?”占位符

注意点:使用query.setString(0,”accp”); 时,参数下标时从0开始的

¨       命名参数

注意点:就是将?占位符起个别名,防止书写出错

       如:sql语句中为…where name=:name …

赋值为:query.setString(“name”,”accp”);

¨       封装参数

注意点:就是将所有参数封装成一个Bean,然后通过query对象的setProperties(Object obj),实现参数的设定

          查询的hql语句中,占位符就是封转在Bean中的属性名

·         使用聚合函数

¨       count(),min(),max(),avg().sum()

¨       返回的唯一结果是 long 类型

¨       使用query.uniqueResult();方法获得数据,注意类型转换

·         排序

¨       order by u.Id  asc ; (升序)

¨       order by u.Id  desc;(降序)

·         分组    group by

·         分页

¨       根据结果获得总记录数:(int count = list.size())

¨       计算总页数:(int totalpages = (count % pagesize ==0 )?(count/pagesize):(count/pagesize+1)))

¨       实现分页:设置获取的第一条页码:query.setFirstResult((pageIndex-1)*pagesize)

                     设置获取的最后页码:query.setMaxResults(pagesize);

                     得到分页查询的结果:List list = query.list();

·         子查询

¨       注意:Hibernate子查询必须用圆括号包围且必须出现在where子句中,子查询通常被 sql 聚集函数调用,子查询中引用一个外部查询的别名也是被允许的

  评论这张
 
阅读(17)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017