// HQL: Hibernate Query Language.
// 特点:
// >> 1,与SQL类似。SQL中的语法基本上都能够直接使用。
// >> 2。SQL查询的是表和表中的列;HQL查询的是对象与对象中的属性。
// >> 3,HQL的keyword不区分大写和小写,类名与属性名是区分大写和小写的。 // >> 4,SELECT能够省略. // 1,简单的查询。Employee为实体名而不是数据库中的表名(面向对象特性)
hql = "FROM Employee";
hql = "FROM Employee AS e"; // 使用别名
hql = "FROM Employee e"; // 使用别名,askeyword可省略 // 2。带上过滤条件的(能够使用别名):Where
hql = "FROM Employee WHERE id<10";
hql = "FROM Employee e WHERE e.id<10";
hql = "FROM Employee e WHERE e.id<10 AND e.id>5"; // 3,带上排序条件的:Order By
hql = "FROM Employee e WHERE e.id<10 ORDER BY e.name";
hql = "FROM Employee e WHERE e.id<10 ORDER BY e.name DESC";
hql = "FROM Employee e WHERE e.id<10 ORDER BY e.name DESC, id ASC"; // 4,指定select子句(不能够使用select *)
hql = "SELECT e FROM Employee e"; // 相当于"FROM Employee e"
hql = "SELECT e.name FROM Employee e"; // 仅仅查询一个列,返回的集合的元素类型就是这个属性的类型
hql = "SELECT e.id,e.name FROM Employee e"; // 查询多个列,返回的集合的元素类型是Object数组
hql = "SELECT new Employee(e.id,e.name) FROM Employee e"; // 能够使用new语法。指定把查询出的部分属性封装到对象中 // 5,运行查询,获得结果(list、uniqueResult、分页 )
Query query = session.createQuery("FROM Employee e WHERE id<3");
query.setFirstResult(0);
query.setMaxResults(10); // 等同于 limit 0,10
//两种查询结果list、uniqueResult
// List list = query.list(); // 查询的结果是一个List集合
// Employee employee = (Employee) query.uniqueResult();// 查询的结果是唯一的一个结果,当结果有多个。就会抛异常 // 6。方法链
List list = session.createQuery(//
"FROM Employee e")//
.setFirstResult(0)//
.setMaxResults(10)//
.list(); // 7,聚集函数:count(), max(), min(), avg(), sum()
hql = "SELECT COUNT(*) FROM Employee"; // 返回的结果是Long型的
hql = "SELECT min(id) FROM Employee"; // 返回的结果是id属性的类型 //8,分组: Group By ... Having
hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name";
hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name HAVING count(e.id)>1";
hql = "SELECT e.name,COUNT(e.id) FROM Employee e WHERE id<9 GROUP BY e.name HAVING count(e.id)>1";
hql = "SELECT e.name,COUNT(e.id) " + //
"FROM Employee e " + //
"WHERE id<9 " + //
"GROUP BY e.name " + //
"HAVING count(e.id)>1 " + //
"ORDER BY count(e.id) ASC";
hql = "SELECT e.name,COUNT(e.id) AS c " + //
"FROM Employee e " + //
"WHERE id<9 " + //
"GROUP BY e.name " + //
"HAVING count(e.id)>1 " + // 在having子句中不能使用列别名
"ORDER BY c ASC"; // 在orderby子句中能够使用列别名 // 9,连接查询 / HQL是面向对象的查询
//>> 内连接(innerkeyword能够省略)
hql = "SELECT e.id,e.name,d.name FROM Employee e JOIN e.department d";
hql = "SELECT e.id,e.name,d.name FROM Employee e INNER JOIN e.department d";
//>> 左外连接(outerkeyword能够省略)
hql = "SELECT e.id,e.name,d.name FROM Employee e LEFT OUTER JOIN e.department d";
//>> 右外连接(outerkeyword能够省略)
hql = "SELECT e.id,e.name,d.name FROM Employee e RIGHT JOIN e.department d";
//能够使用更方便的方法
hql = "SELECT e.id,e.name,e.department.name FROM Employee e"; // 10,查询时使用參数
// >> 方式一:使用'?'占位
hql = "FROM Employee e WHERE id BETWEEN ? AND ? ";
List list2 = session.createQuery(hql)//
.setParameter(0, 5)// 设置參数,第1个參数的索引为0。
.setParameter(1, 15)//
.list(); // >> 方式二:使用变量名
hql = "FROM Employee e WHERE id BETWEEN :idMin AND :idMax";
List list3 = session.createQuery(hql)//
.setParameter("idMax", 15)//
.setParameter("idMin", 5)//
.list(); // 当參数是集合时,一定要使用setParameterList()设置參数值
hql = "FROM Employee e WHERE id IN (:ids)";
List list4 = session.createQuery(hql)//
.setParameterList("ids", new Object[] { 1, 2, 3, 5, 8, 100 })//
.list(); // 11,update与delete,不会通知Session缓存
// >> Update
int result = session.createQuery(//
"UPDATE Employee e SET e.name=? WHERE id>15")//
.setParameter(0, "无名氏")//
.executeUpdate(); // 返回int型的结果,表示影响了多少行。 // >> Delete
int result1 = session.createQuery(//
"DELETE FROM Employee e WHERE id>15")//
.executeUpdate(); // 返回int型的结果,表示影响了多少行。

经常使用的Hql语句的更多相关文章

  1. hibernate -- HQL语句总结

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

  2. 执行HQL语句出现Remember that ordinal parameters are 1-based

    今天使用hibernate出个奇怪的错误,第一次碰到 Remember that ordinal parameters are 1-based! 原因是 问题发生的原因是:hql语句里不需要参数,却添 ...

  3. hql语句查询实体类采用list方法的返回结果集

    在hibernate中,用hql语句查询实体类,采用list方法的返回结果为一个List,该List中封装的对象分为以下三种情况:1.查询全部字段的情况下,如"from 实体类", ...

  4. 【Hibernate 6】常用的hql语句以及N+1问题

    HQL:Hibernate Query Language,是Hibernate框架中的查询语言,十分接近于SQL语言!以下介绍一些常用的Hql语句: 一.测试类 Classes类: <span ...

  5. 使用HQL语句的按照参数名字查询数据库信息的时候 “=:”和参数之间不能存在空格,否则会报错

    问题描述: 今天在使用HQL的按照参数的名字查询数据库信息的时候报错如下: org.hibernate.QueryException: Space is not allowed after param ...

  6. Hibernate 的HQL语句,初级

    这里讲解简单的HQL语句,因为很多比较复杂的外查询,用一般的查询很难完成 所以这里需要使用HQL @Test public void selquery(){ System.out.printf(&qu ...

  7. hibernate 之 HQL语句总结【转】

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

  8. hql语句拼接的替换方式

    hql语句拼接的替换方式 hql语句拼接 String hql = "FROM Topic t WHERE t.forum=? "; List<Object> para ...

  9. Hibernate框架HQL语句

    这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...

  10. 关于hibernate中hql语句 case when的写法

    java hql case when的用法 if(null == sorter){ hql.append(" order by m.mDate desc,case when m.mealTi ...

随机推荐

  1. 博弈论与SG函数

    巴什博奕: 两个顶尖聪明的人在玩游戏,有n个石子,每人可以随便拿1−m个石子,不能拿的人为败者,问谁会胜利 结论: 设当前的石子数为\(n=k∗(m+1)\)即\(n%(m+1)==0\)时先手一定失 ...

  2. 【dfs】bzoj3563 DZY Loves Chinese

    因为我们可以通过把某一行读到末尾来获取真正的K,所以把它和假K异或之后就是之前联通的次数(异或的逆运算为其本身).最后一次的暴力一下. #include<cstdio> #include& ...

  3. 小白的Python之路 day4 不同目录间进行模块调用(绝对路径和相对路径)

    一.常用模块调用函数功能解释 1.__file__ 功能:返回自身文件的相对路径 你从pycharm的执行结果可以看出,在pycharm执行atm.py文件时,是从绝对路径下去执行的,而你从cmd下去 ...

  4. 5.3类集(java学习笔记)集合的输出

    一.集合的输出 迭代输出:Iteratror接口 在输出集合时,最标准的方法是使用迭代器迭代输出. 1,List中的迭代器. Iterator中包含三个方法: hasNex()t判断集合内是否有元素存 ...

  5. Linux虚拟机小问题解决方法系列

    1)使用虚拟机的过程中,会碰到虚拟机占用的空间越来越大的情况,即使删除了虚拟机里的文件,磁盘空间还是似乎还是没有释放,使用“vmware-vdiskmanager”工具解决.解决方法在这里:参考.合并 ...

  6. 基于java过滤器实现的ajax跨域解决方案

    http://software.dzhuvinov.com/cors-filter-configuration.html

  7. delphi执行cmd命令和bat文件

    转载地址:http://blog.csdn.net/hutao1101175783/article/details/42807063 cmd:='echo d | Xcopy '+BasePath+' ...

  8. shell--管道命令(pipe)

    管道命令使用的是“|”这个界定符号 管道命令“|”仅能处理经由前面一个命令传来的正确信息,也就是standard output的信息,对于standard error并没有直接处理的能力 每个管道后面 ...

  9. s3c6410 Linux 驱动开发环境搭建

    s3c6410 Linux 驱动开发环境搭建 -- 既然你是做Linux开发的,你还用虚拟机? 非常多人都在win下做开发,于是SD_writer.exe之类的烧写工具"大行其道" ...

  10. builder pattern

    design patterns 结合书本和这个网站的这个系列的文章来看: https://www.tutorialspoint.com/design_pattern/builder_pattern.h ...