常用的Hql语句(转)
原文地址:http://blog.csdn.net/v123411739/article/details/28644007 尊重原创,请访问原文地址
- // HQL: Hibernate Query Language.
- // 特点:
- // >> 1,与SQL相似,SQL中的语法基本上都可以直接使用。
- // >> 2,SQL查询的是表和表中的列;HQL查询的是对象与对象中的属性。
- // >> 3,HQL的关键字不区分大小写,类名与属性名是区分大小写的。
- // >> 4,SELECT可以省略.
- // 1,简单的查询,Employee为实体名而不是数据库中的表名(面向对象特性)
- hql = "FROM Employee";
- hql = "FROM Employee AS e"; // 使用别名
- hql = "FROM Employee e"; // 使用别名,as关键字可省略
- // 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是面向对象的查询
- //>> 内连接(inner关键字可以省略)
- 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";
- //>> 左外连接(outer关键字可以省略)
- hql = "SELECT e.id,e.name,d.name FROM Employee e LEFT OUTER JOIN e.department d";
- //>> 右外连接(outer关键字可以省略)
- 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: Hibernate Query Language.
- // 特点:
- // >> 1,与SQL相似,SQL中的语法基本上都可以直接使用。
- // >> 2,SQL查询的是表和表中的列;HQL查询的是对象与对象中的属性。
- // >> 3,HQL的关键字不区分大小写,类名与属性名是区分大小写的。
- // >> 4,SELECT可以省略.
- // 1,简单的查询,Employee为实体名而不是数据库中的表名(面向对象特性)
- hql = "FROM Employee";
- hql = "FROM Employee AS e"; // 使用别名
- hql = "FROM Employee e"; // 使用别名,as关键字可省略
- // 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是面向对象的查询
- //>> 内连接(inner关键字可以省略)
- 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";
- //>> 左外连接(outer关键字可以省略)
- hql = "SELECT e.id,e.name,d.name FROM Employee e LEFT OUTER JOIN e.department d";
- //>> 右外连接(outer关键字可以省略)
- 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语句(转)的更多相关文章
- 【Hibernate 6】常用的hql语句以及N+1问题
HQL:Hibernate Query Language,是Hibernate框架中的查询语言,十分接近于SQL语言!以下介绍一些常用的Hql语句: 一.测试类 Classes类: <span ...
- 常用的Hql语句
// HQL: Hibernate Query Language.// 特点:// >> 1,与SQL相似,SQL中的语法基本上都可以直接使用.// >> 2,SQL查询的是表 ...
- hibernate中常用的Hql语句总结
// HQL: Hibernate Query Language. // 特点: // >> 1,与SQL相似,SQL中的语法基本上都可以直接使用. // >> 2,SQL查询 ...
- Hibernate框架HQL语句
这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...
- J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate())
J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate()) 当我们使用Hibernate进行数据的CRUD操作时,利用模版进行操作不失为一种方法. ...
- getHibernateTemplate()(Spring中常用的hql查询方法)
Spring中常用的hql查询方法(getHibernateTemplate()) --------------------------------- 一.find(String queryStrin ...
- HibernateCRUD基础框架(2)-HQL语句构造器(HqlQueryBuilder,HqlUpdateBuilder)
上篇讲述了最基本的实体类,本篇接着讲述HQL语句构造器,包括查询和更新等. 优点:通过面向对象的方式构造HQL语句,更快捷,不需要手动拼接HQL. 缺点:封装可能降低性能,只能支持常用的和较为简单的H ...
- hql语句查询
这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...
- hibernate -- HQL语句总结
1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql = "from Users"; Query query ...
随机推荐
- 配置LANMP环境(9)-- 安装Git与vsftp
一.安装Git 检查是否已经安装 git --version 安装 yum -y install git 二.安装vsftp 检查是否已经安装 yum list installed vsftpd 安装 ...
- [转]postman 官方文档解说
1. 安装 两种安装方式,我热衷于以chrome插件形式安装 Chrome插件 Mac App 2. 发送请求 Postman最基础的功能就是发送http请求,支持GET/PUT/POST/DELET ...
- 【入门】创建express项目
1.创建项目(图解) 2.访问http://localhost:3000/就看到熟悉的页面了 3.查看项目目录 参考文档:http://jingyan.baidu.com/article/92 ...
- 在mac上独立安装PHP环境
1.http://dditblog.com/blog_418.html 2.http://www.jianshu.com/p/0456dd3cc78b
- [note]树链剖分
树链剖分https://www.luogu.org/problemnew/show/P3384 概念 树链剖分,是一种将树剖分成多条不相交的链的算法,并通过其他的数据结构来维护这些链上的信息. 最简单 ...
- 我的Android进阶之旅------> Android在TextView中显示图片方法
面试题:请说出Android SDK支持哪些方式显示富文本信息(不同颜色.大小.并包含图像的文本信息),并简要说明实现方法. 答案:Android SDK支持如下显示富文本信息的方式. 1.使用Tex ...
- Linux使用yum安装rpm包
1.yum其实管理的也是rpm包,只不过依赖什么的都自己做了2.yum在有的linux版本是收费的,但是CentOS是免费的3.yum一般意义上是需要联网的,即:使用网络yum源 a.yum源配置文件 ...
- linux c编程:信号(五) sigsuspend
更改进程的信号屏蔽字可以阻塞所选择的信号,或解除对它们的阻塞.使用这种技术可以保护不希望由信号中断的代码临界区.如果希望对一个信号解除阻塞,然后pause等待以前被阻塞的信号发生,则又将如何呢?假定信 ...
- Bootstrap学习5--bootstrap中的模态框(modal,弹出层)
bootstrap中的模态框(modal),不同于Tooltips,模态框以弹出对话框的形式出现,具有最小和最实用的功能集. 务必将模态框的 HTML 代码放在文档的最高层级内(也就是说,尽量作为 b ...
- Windows磁盘MBR结构详解
在之前的文章 Windows存储管理之磁盘结构详解 中介绍了Windows的磁盘结构和MBR.本文将对Windows Basic Disk中的MBR的结构进行介绍,帮助读者更好的了解Windows系统 ...