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. java_第一年_JavaWeb(8)

    前面说到,JSP在运行时会被编译成Servlet源代码,通过_jspServlet方法处理请求,此时该方法会传递和提供9个与web开发相关的对象进行使用,开发人员在JSP页面通过对这些变量即可引用这9 ...

  2. Meet in the middle算法总结 (附模板及SPOJ ABCDEF、BZOJ4800、POJ 1186、BZOJ 2679 题解)

    目录 Meet in the Middle 总结 1.算法模型 1.1 Meet in the Middle算法的适用范围 1.2Meet in the Middle的基本思想 1.3Meet in ...

  3. 同一客户端多个git账号的配置

    同一客户端多个git账号的配置 同一客户端多个git账号的配置 步骤一:用ssh-keygen命令生成一组新的id_rsa_new和id_rsa_new.pub. 1 ssh-keygen -t rs ...

  4. ApacheHttpServer出现启动报错:the requested operation has failed解决办法

    转自:https://www.jb51.net/article/21004.htm 原因一:80端口占用 例如IIS,另外就是迅雷.我的apache服务器就是被迅雷害得无法启用! 原因二:软件冲突 装 ...

  5. 2018-2-13-win10-uwp-分治法

    title author date CreateTime categories win10 uwp 分治法 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17:2 ...

  6. Centos上Docker的安装及加速

    #环境 :内核的版本必须大于3.10 #安装docker yum install epel-release -y yum install docker-ce ##安装docker-ce #配置文件 d ...

  7. 吉首大学2019年程序设计竞赛(重现赛) B 干物妹小埋

    链接:https://ac.nowcoder.com/acm/contest/992/B来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K ...

  8. hibernate 插入Java.uitil.date时时分秒丢失问题解决

    <property name="cj_time" column="cj_time"/>  不需要手动定义类型(定义了只能精确到日) new Date ...

  9. bzoj1190 [HNOI2007]梦幻岛宝珠 背包

    题目 https://lydsy.com/JudgeOnline/problem.php?id=1190 题解 好神仙的一道题啊. 既然 \(w_i = a_i\cdot 2^{b_i}\),那么不妨 ...

  10. bzoj1004 [HNOI2008]Cards Burnside 引理+背包

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1004 题解 直接 Burnside 引理就可以了. 要计算不动点的个数,那么对于一个长度为 \ ...