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类型,不用你自己再转化 ...
随机推荐
- spring-第七篇之深入理解容器中的bean
1.抽象bean与子bean 用于指定配置模板. 2.容器中的工厂bean 这种工厂bean必须实现FactoryBean接口,通过spring容器getBean()方法获取它时,容器返回的不是Fac ...
- BZOJ 1040 [ZJOI2008]骑士 (基环树+树形DP)
<题目链接> 题目大意: Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的 ...
- 20191114PHP图像绘制
<?phpob_clean();$img=imagecreate(400,400);$back=imagecolorallocate($img,200,200,100); $blue=image ...
- 数据结构 java概况
数据结构可以分为三种结构: 线性结构: 数组:栈:队列:链表:哈希表 树结构: 二叉树,二分搜索树,AVL,红黑树,Treap,Splay,堆,Trie,线段树,K-D树,并查集,哈夫曼树 图结构 邻 ...
- 生成树计数 Matrix-Tree 定理 学习笔记
一直都知道要用Matrix-Tree定理来解决生成树计数问题,但是拖到今天才来学.博主数学不好也只能跟着各位大佬博客学一下它的应用以及会做题,证明实在是不会. 推荐博客: https://www.cn ...
- 【LeetCode】分治法 divide and conquer (共17题)
链接:https://leetcode.com/tag/divide-and-conquer/ [4]Median of Two Sorted Arrays [23]Merge k Sorted Li ...
- Vue 侦听属性
Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性 <!DOCTYPE html> <html> <head> <meta cha ...
- fork/join并发编程
Fork & Join 的具体含义 Fork 一词的原始含义是吃饭用的叉子,也有分叉的意思.在Linux 平台中,函数 fork()用来创建子进程,使得系统进程可以多一个执行分支.在 Java ...
- Center os6.5 mysql
1 # yum -y install mysql-server mysql mysql-dev 2 启动mysql # service mysqld start 3 为root用户配置一个密码 ...
- better-scroll 的使用
1.安装 cnpm install better-scroll --save 2.引入 import BScroll from "better-scroll"; 3.初始化 dat ...