以下内容全部摘自韩顺平老师Hibernate笔记

* uniqueResult方法

如果我们检索一个对象,明确知道最多只有一个对象,则建议使用该方法:

具体用法如下:

Student s=(Student) session.createQuery("from Student where sid='20050003'").uniqueResult();

System.out.println(s.getSname());

*distinct的用法

过滤重复的记录

//比如,显示所有学生的性别和年龄.

List list=session.createQuery("select distinct sage,ssex from Student").list();

for(int i=0;i<list.size();i++){

Object []  objs=(Object[]) list.get(i);

System.out.println(objs[0].toString()+" "+objs[1].toString());

}

*between and..

List list=session.createQuery("select distinct sage,ssex,sname from Student where sage between 20 and 22").list();

for(int i=0;i<list.size();i++){

Object []  objs=(Object[]) list.get(i);

System.out.println(objs[0].toString()+" "+objs[1].toString()+objs[2].toString());

}

*in /not in

//查询计算机系和外语系的学生信息

List<Student> list=session.createQuery("from Student where sdept in ('计算机系','外语系')").list();

//取出1. for 增强

for(Student s:list){

System.out.println(s.getSname()+" "+s.getSaddress()+" "+s.getSdept());

}

*group by使用

//显示各个系的学生的平均年龄

List<Object[]> list=session.createQuery("select avg(sage),sdept from  Student group by sdept").list();

//取出1. for 增强

for(Object[] obj:list){

System.out.println(obj[0].toString()+" "+obj[1].toString());

}

//having的使用

//1.对分组查询后的结果,进行筛选:比如请显示人数大于3的系名称

//a. 查询各个系分别有多少学生.

List<Object[]> list=session.createQuery("select count(*) as c1,sdept from  Student group by sdept having count(*)>3").list();

//取出1. for 增强

for(Object[] obj:list){

System.out.println(obj[0].toString()+" "+obj[1].toString());

}

//2查询女生少于200人的系

//a.查询各个系的女生有多个个

List<Object[]> list=session.

createQuery("select count(*) as c1,sdept from  Student where ssex='F' group by sdept").list();

//取出1. for 增强

for(Object[] obj:list){

System.out.println(obj[0].toString()+" "+obj[1].toString());

}

//1.查询计算机系共多少人?->如果我们返回的是一列数据

//这时我们的取法是直接取出list->object 而不是 list->Object[]

List<Object[]> list=session.

createQuery("select sage from  Student where sdept='计算机系'").list();

//取出1. for 增强

for(Object obj:list){

System.out.println(obj.toString());

}

3.查询选修11号课程的最高分和最低分.

                     List<Object[]> list=session.

                     createQuery("select 11,max(grade),min(grade) from Studcourse where course.cid=11").list();

                     //取出1. for 增强

                     for(Object[] obj:list){

                            System.out.println(obj[0].toString()+" max="+obj[1].toString()+" min="+obj[2].toString());

                     }

//计算各个科目不及格的学生数量.(学生练习!)

List<Object[]> list=session.

createQuery("select count(*),student.sdept from Studcourse where grade<60 group by student.sdept").list();

//取出1. for 增强

for(Object[] obj:list){

System.out.println(obj[0].toString()+" "+obj[1].toString());

}

  • 参数绑定案例 (jdbc->PreparedStatement setXXX

    使用参数绑定的好处有3:

  1. 可读性提高, 2 效果高 3,防止 sql注入漏洞

    ? 面试题: 如果不使用参数绑定,怎样防止登录时, sql注入?

    name  password

    思路: 1. 通过用户名,查询出该用户名在数据库中对应的密码,然后再与用户输入的秘密比较,如果相等,则用户和法,否则,非法.

    参数绑定有两种形式

    Query q=session.createQuery(from Student where sdept=:dept and sage>:age)

    如果我们的参数是 :冒号形式给出的,则我们的参数绑定应当这样:

    List<Student> list=session.createQuery("from Student where sdept=:a1 and sage>:sage")

    .setString("a1", "计算机系").setString("sage", "2").list();

    还有一种形式:

    Query q=session.createQuery(from Student where sdept=? and sage>?)

    如果我们的参数是以 ? 形式给出的则,参数绑定应当:

    List<Student> list=session.createQuery("from Student where sdept=? and sage>?")

    .setString(0, "计算机系").setString(1, "2").list();

    参数的绑定,可以分开写:形式如下:

    Query query=session.createQuery("from Student where sdept=? and sage>?");

    query.setString(0, "计算机系");

    query.setString(1, "2");

    List <Student> list=query.list();

    for(int i=0;i<list.size();i++){

    Student s= list.get(i);

    System.out.println(s.getSname()+" "+s.getSage());

    }

HQL的更多相关文章

  1. hibernate -- HQL语句总结

    1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql = "from Users"; Query query ...

  2. Hibernate 查询方式(HQL/QBC/QBE)汇总

    作为老牌的 ORM 框架,Hibernate 在推动数据库持久化层所做出的贡献有目共睹. 它所提供的数据查询方式也越来越丰富,从 SQL 到自创的 HQL,再到面向对象的标准化查询. 虽然查询方式有点 ...

  3. hql中in关键字的用法

    hql: from " + FoodComment.class.getName() + " f where f.id in :groupIds" 封装的方法: publi ...

  4. [转]HQL中的子查询

    原文地址:http://blog.csdn.net/xb12369/article/details/8638683 子查询:   子查询是SQL语句中非常重要的功能特性,它可以在SQL语句中利用另外一 ...

  5. Hibernate--------八大类HQL查询集合

    Hibernate的   八大类HQL查询集合 Hibernate的八大类HQL查询集合: 一:属性查询(SimplePropertyQuery) 1,单一属性查询 *返回结果集属性列表,元素类型和实 ...

  6. Hibernate之HQL添加过滤器查询的用法

    HQL查询过程中支持添加过滤器.使用步骤是这样的: 首先在要查询的实体对象的映射中使用<filter-def>标签配置过滤器,并在相对应的<class>标签中添加对应的< ...

  7. Hibernate之HQL查询的一些例子

    Hibernate配备了一种非常强大的查询语言,就是HQL(hibernate query language),HQL看上去很像sql,但只是语法结构上相似,HQL是一种面向对象的查询,他可以理解继承 ...

  8. Hibernate —— HQL、QBC检索方式

    一.HQL 检索方式 以双向的一对多来测试 HQL 检索方式.以 Department 和 Employee 为例. 建表语句: CREATE TABLE department ( dept_id ) ...

  9. hibernate中HQL练习时候一个小小的错误导致语法异常

    package cn.db.po.test; import java.util.List; import cn.db.po.User; import cn.db.po.biz.UserBiz; pub ...

  10. [NHibernate]HQL查询

    目录 写在前面 文档与系列文章 查询的几种方式 HQL查询 一个例子 总结 写在前面 上篇文章介绍了nhibernate在项目中的基本配置,包括数据库连接字符串的设置,映射文件的配置及需注意的地方,这 ...

随机推荐

  1. LeetCode 【235. Lowest Common Ancestor of a Binary Search Tree】

    Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS ...

  2. JavaScript 中的window.event代表的是事件的状态,jquery事件对象属性,jquery中如何使用event.target

    http://wenda.haosou.com/q/1373868839069215 http://kylines.iteye.com/blog/1660236 http://www.cnblogs. ...

  3. 请求rest web服务client

    RestClient using System; using System.Globalization; using System.IO; using System.Net; using System ...

  4. android四大组件之ContentProvider(二)

    ContentProvider学习笔记 上一章节我们编写了自定义的一个StudentProvider,他提供了两种供外界访问数据的方式,content://come.demo.sqlite.stude ...

  5. webpack-dev-server、webpack-dev-middleware、webpack-hot-middleware区别

    webpack-dev-server: 它是一个静态资源服务器,只用于开发环境: webpack-dev-server会把编译后的静态文件全部保存在内存里: webpack-dev-middlewar ...

  6. LuManager 2.0.97 设置shopex 手机版waptouch,绑定二级目录

    1.步骤,先要把主站的 限制目录访问那个勾选,去掉 2.创建新网站,不需要ftp,直接设置网站目录“/home/主站目录/waptouch” 3.保存

  7. SQL2005 : 如何在SQL Server Profiler (事件查看器)中 跟踪查看死锁恢复

    SQL Profiler 通过 SQL Profiler 工具程序,可监控应用程序如何访问数据库引擎.普通来说,当系统性能需要优化或是应用程序对数据库访问的结果不合预期,都可以使用该工具确认视图问题所 ...

  8. error while loading shared libraries:错误的原因和解决方法

    原因有两个: 1.操作系统没有改共享库 2.安装了该共享库,但是执行外部程序调用该共享库的时候,程序按照默认路径(/usr/lib./lib)找不到该共享库文件 解决方法: ubuntu系统的共享库一 ...

  9. oracle直通车6关于rman备份恢复数据文件,以及创建分区表的实验

    1.创建一张表,在表上创建一个索引,分别查询表,索引各自分配了多少个extents,多少个数据块以及总共占用空间的大小(bytes). 答:创建一张表t,为字段object_id创建索引t_objec ...

  10. mysql 安装日志

    善于使用 mysqld.exe --console 来得到提示