Hibernate中常用HQL
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的更多相关文章
- J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate())
J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate()) 当我们使用Hibernate进行数据的CRUD操作时,利用模版进行操作不失为一种方法. ...
- Hibernate中关于HQL查询返回List<Object>数据的结果集问题
---恢复内容开始--- 开发中遇到的一个小问题,使用Hibernate中的HQL查询时,使用query.list()查询出来的是一个List<Object>结果集 原来代码: publi ...
- Hibernate中的HQL语言
一.HQL语言简介 HQL全称是Hibernate Query Language,它提供了是十分强大的功能,它是针对持久化对象,直接取得对象,而不进行update,delete和insert等操作.而 ...
- 分享知识-快乐自己:Hibernate 中的 HQL 语句的实际应用
概要: Hibernate 支持三种查询方式: HQL查询.Criteria查询及原声 SQL (Native SQL)查询. HQL(Hibernate Query Language,Hiberna ...
- Hibernate中的HQL的基本常用小例子,单表查询与多表查询
<span style="font-size:24px;color:#3366ff;">本文章实现HQL的以下功能:</span> /** * hql语法: ...
- hibernate中常用的Hql语句总结
// HQL: Hibernate Query Language. // 特点: // >> 1,与SQL相似,SQL中的语法基本上都可以直接使用. // >> 2,SQL查询 ...
- Hibernate中的HQL查询与缓存机制
HQL:完全面向对象查询 SQL的执行顺序: 1.From 2.Where 过滤基础数据 where与having的区别:1.顺序不同 2.where过滤基础数据 3. 过滤聚合函数 3.Group ...
- Hibernate 中update hql语句
今天在MySQL中用hibernate测试update语句发现以下问题: update语句竟然不去作用: 表机构如下: create table student(sid int primary key ...
- hibernate中使用HQL进行数据库查询
1.写的规则比较简单,我讲一下,如图Station这个不是数据库中的表,而是entity包中的类名Station,可以省略 select * 2.返回的类型自动转化为String类型,不用你自己再转化 ...
随机推荐
- [LeetCode] 177.第N高薪水
题目: 编写一个 SQL 查询,获取 Employee表中第 n 高的薪水(Salary). +----+--------+ | Id | Salary | +----+--------+ | 1 | ...
- mysql练习题目试水50题,附建库sql代码
如果你没试过水的话,那一题一题地每一题都敲一遍吧.不管它们对你看来有多么简单. 建库代码 部分题目答案在末尾,可用ctrl f 搜索题号. 作业练习——学生-选课 表结构 学生表: Student ...
- 5、numpy——切片和索引
1.一维数组 1.1 一维数组很简单,基本和列表一致.ndarray 数组可以基于 0 - n 的下标进行索引. 切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step ...
- Codeforces Round #529 (Div. 3) E. Almost Regular Bracket Sequence (思维)
Codeforces Round #529 (Div. 3) 题目传送门 题意: 给你由左右括号组成的字符串,问你有多少处括号翻转过来是合法的序列 思路: 这么考虑: 如果是左括号 1)整个序列左括号 ...
- jxl读取excel浮点数据时,小数点后三位截取问题
今天导入Excel数据时,发现很多浮点数据被自动四舍五入只保留了三位,原来是jxl里对getContents()进行了封装,对数值型数据作了该处理.一般我们会对读取excel的一整套流程作为工具类,那 ...
- JS 数组 学习笔记
什么是数组 数组(array)是按次序排列的一组值.每个值的位置都有编号(从0开始),整个数组用方括号表示.本质上数组属于一种特殊的,由Array构造出来的对象,typeof运算符返回数组的类型是 o ...
- shell脚本从入门到精通(初级)之入门篇
写在开头 本文是阅读<Linux命令行与shell脚本编程大全>时的一些笔记,主要是shell脚本的一些基本语法, 还有很多细节和高级内容没有写到. 笔者也是shell script菜鸟, ...
- linux性能分析工具Memory
- 天启android5.1系统无法在非1650批次号的rk3288w芯片上启动
天启android5.1系统无法在非1650批次号的rk3288w芯片上启动 挂掉log,说明在rtc初始化后挂掉 [ ) HIGH! ======== [ [ [ 1.420258] [WLAN_R ...
- MySQL执行外部sql脚本文件命令报错:unknown command '\'
由于编码不一致导致的 虽然大部分导出是没有问题的 但是数据表中存储包含一些脚本(富文本内容)会出现该问题,强制指定编码即可解决. mysql导入时指定编码: mysql -u root -p --de ...