HQL是Hibernate自带的查询语言 
HQL是一种面向对象的查询语言。SQL的操作对象是数据表和列等数据对象,而HQL的操作对象是类、实例、属性等。 
HQL的语法很像SQL的语法

以下举例均以学生类为例:Students.java

1.from子句 
规则: from + 持久化类的类名

//Students 是学生类,直接这么写就可以查询出Students持久化类对应于数据库表中的所有信息
//select可以省略.
String hql = "from Students";
String hql = "from Students as s";//使用别名
String hql = "from Students s";//别名可以省略
Query query = getCurrentSession().createQuery(hql);
//注意:当省略select子句时,直接使用from子句来查询全部,query.list()返回的是该持久化类型的List
List<Students> studentsList = query.list();

2.select子句 
规则:select + 持久化类中属性名(可以多个或一个) + from子句。。。

//hql中不可以写 select * 这个实际上是相当于 form Students
hql = "select s from Students as s";//相当于 from Students
hql = "select s.name from Students as s";//只查询一列,返回List<Object>
hql = "select s.name,s.age from Students as s";//查询多列,返回List<Object[]>
hql = "select new Students(s.name,s.age) from Students as s"//自定义返回类型,返回List<Students>,同时在Students.java持久化类中要有相应的构造器和无参构造器
hql = "select distinct s.name from Students s"//distinct关键字,返回List<Object>

下面说一下Select子句的不同返回类型 
①Object[]----默认的 
②以List 
③以map 
④自定义 
⑤distinct关键字

//默认的List<Object[]> 返回,此时需要查询多个属性,一个属性的查询返回的是List<Object>
hql = "select s.name,s.age from Students s";
List<Object[]> list = query.list(); //查询一个属性
hql = "select s.name from Students s";
List<Object> list = query.list(); //以list返回
hql = "select new List (s.name,s.age) from Students s";
List<List> list = query.list(); //以map返回:如果查询字段属性不设别名则key值以序号显示,查询属性使用别名,key值以别名显示
hql = "select new map(name,age) from Students";
List<Map> list = query.list();
list.get(0).get("0");//没有别名时,key以序号命名
hql = "select new map(s.name,s.age) from Students s";
list.get(0).get("name");//通过别名来获取 //以自定义的构造器返回:持久化类中必须声明了该构造器和无参构造器
hql = "select new Students(s.name,s.age) from Students s";
List<Students> list = query.list(); //以distinct关键字返回
hql = "select distinct s.name from Students s";
List<Object> list = query.list();//因为是一个字段所有返回List<Object>

3.where子句 
首先说一下Query两种参数传递方式 
①使用‘?’占位

hql = "from Students where name = ? ";
Query query = getCurrentSession().createQuery(hql);
query.setParameter(0,"张三",Hibernate.STRING);
//第一个参数:表示是第几个'?',从0开始
//第二个参数:表示实际查询的内容
//第三个参数:表示该参数的类型(可以省略)

②使用变量名

hql = "from Students where name = :NAME ";
Query query = getCurrentSession().createQuery(hql);
query.setParameter("NAME","张三",Hibernate.STRING);
//第一个参数:与hql中':'后的变量名对应
//第二个参数:表示实际查询的内容
//第三个参数:表示该参数的类型(可以省略) //当参数是集合时,一定要使用setParameterList()设置参数值
hql = "from Students s where name in (:NAME)";
Query query = getCurrentSession().createQuery(hql);
query.setParameterList("NAME", new Object[] { "张三","李四"});

下面是where子句中的应用(因为跟sql类似就不举例) 
①比较运算 
=  <>  <  >  <=  >= 
null值判断:is null       is not null 
           HQL中可以写 x = null;  / x <> null;  会自动转换成相应sql 
②范围运算 
in() / not in() 
between 值1 and 值2

③字符串匹配 
like关键字 
通配符:"%"---任意字符 
        "_"---一个字符

④逻辑运算 
and or not

⑤集合运算 
is empty /is not empty 
member of

⑥四则运算 
+  -  *  /

4.order by子句 
同sql:对查询结果排序 
desc:降序 
esc:升序(默认)

5.分组: Group By ... Having  
在having子句中不能使用列别名  
在orderby子句中可以使用列别名

hql = "select s.name,count(s.age) from Students s where s.age > 10 group by s.name having count(s.age) > 1 order by s.age";  

6.聚集函数 
count(), max(), min(), avg(), sum()

7.查询单个对象

hql = "from Students where name = '"张三"'";
Query query = session.createQuery(hql);
Students student = query.uniqueResult();
//当查询结果不唯一时,会抛出异常。

8.连接查询

Hibernate中常用HQL的更多相关文章

  1. J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate())

    J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate())   当我们使用Hibernate进行数据的CRUD操作时,利用模版进行操作不失为一种方法. ...

  2. Hibernate中关于HQL查询返回List<Object>数据的结果集问题

    ---恢复内容开始--- 开发中遇到的一个小问题,使用Hibernate中的HQL查询时,使用query.list()查询出来的是一个List<Object>结果集 原来代码: publi ...

  3. Hibernate中的HQL语言

    一.HQL语言简介 HQL全称是Hibernate Query Language,它提供了是十分强大的功能,它是针对持久化对象,直接取得对象,而不进行update,delete和insert等操作.而 ...

  4. 分享知识-快乐自己:Hibernate 中的 HQL 语句的实际应用

    概要: Hibernate 支持三种查询方式: HQL查询.Criteria查询及原声 SQL (Native SQL)查询. HQL(Hibernate Query Language,Hiberna ...

  5. Hibernate中的HQL的基本常用小例子,单表查询与多表查询

    <span style="font-size:24px;color:#3366ff;">本文章实现HQL的以下功能:</span> /** * hql语法: ...

  6. hibernate中常用的Hql语句总结

    // HQL: Hibernate Query Language. // 特点: // >> 1,与SQL相似,SQL中的语法基本上都可以直接使用. // >> 2,SQL查询 ...

  7. Hibernate中的HQL查询与缓存机制

    HQL:完全面向对象查询 SQL的执行顺序: 1.From 2.Where 过滤基础数据 where与having的区别:1.顺序不同 2.where过滤基础数据 3. 过滤聚合函数 3.Group ...

  8. Hibernate 中update hql语句

    今天在MySQL中用hibernate测试update语句发现以下问题: update语句竟然不去作用: 表机构如下: create table student(sid int primary key ...

  9. hibernate中使用HQL进行数据库查询

    1.写的规则比较简单,我讲一下,如图Station这个不是数据库中的表,而是entity包中的类名Station,可以省略 select * 2.返回的类型自动转化为String类型,不用你自己再转化 ...

随机推荐

  1. 关于Python的10大实用编程技巧

      Python 是一种通用的脚本开发语言,比其他编程语言更加简单.易学,其面向对象特性甚至比Java.C#..NET更加彻底,因此非常适合快速开发. Python 已经成为最受欢迎的程序设计语言之一 ...

  2. 在LIPS表追加拣配数量PIKMG字段(转)

    原文地址:https://blog.csdn.net/zhongguomao/article/details/43451127 最近比较忙,此方案出后测试了很多种情况都存在问题,只能留待以后处理了.. ...

  3. P3914染色计数

    题目描述 有一颗\(N\)个节点的树,节点用\(1,2,\cdots,N\)编号.你要给它染色,使得相邻节点的颜色不同.有\(M\)种颜色,用\(1,2,\cdots,M\)编号.每个节点可以染\(M ...

  4. 物流运输(最短路+dp)

    这道题是相当的火,但是在tyher的讲解下我一遍就AC了!!! Part 1 理解题目 从第一天到最后一天,总会有一些点莫名其妙地走不了,所以导致我们不能按照上一次的最短路一直运输得到最少费用,而需要 ...

  5. HDU 1255 覆盖的面积 ( 扫描线 + 离散 求矩阵大于k次面积并 )

    覆盖的面积 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  6. 【经典转载】关于Struts2的拦截器

    拦截器(interceptor)是Struts2最强大的特性之一,也可以说是struts2的核心,拦截器可以让你在Action和result被执行之前或之后进行一些处理.同时,拦截器也可以让你将通用的 ...

  7. form表单,登录用户,密码,按钮,提交、重置

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. jquery实现全选,反选,取消的操作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. JavaFX程序初次运行创建数据库并执行建表SQL

    在我的第一个JavaFX程序完成安装的时候才突然发现,不能要用这个软件还要手动执行Sql来建表吧? 于是我的想法是在Main程序中执行时检测数据库连接状况,如果没有检测到数据库或者连接异常,那么出现错 ...

  10. 测试微信小程序页面的生命周期

    前言:本人是一个初学者,也是第一次写博客,敲键盘的时候还不知道发布后是什么效果,希望内容给其他初学的同学一点帮助,同时加深自己的理解.这篇随笔讲的是Page页面的生命周期,在开发中是基础中的基础,很容 ...