hibernate中常用的Hql语句总结
- // 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型的结果,表示影响了多少行。
hibernate中常用的Hql语句总结的更多相关文章
- J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate())
J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate()) 当我们使用Hibernate进行数据的CRUD操作时,利用模版进行操作不失为一种方法. ...
- 【Hibernate 6】常用的hql语句以及N+1问题
HQL:Hibernate Query Language,是Hibernate框架中的查询语言,十分接近于SQL语言!以下介绍一些常用的Hql语句: 一.测试类 Classes类: <span ...
- HQL语句中数据类型转换,及hibernate中createQuery执行hql报错
一.HQL语句中数据类型转换: 我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基 ...
- getHibernateTemplate()(Spring中常用的hql查询方法)
Spring中常用的hql查询方法(getHibernateTemplate()) --------------------------------- 一.find(String queryStrin ...
- SQL Server中常用的SQL语句(转):
SQL Server中常用的SQL语句 转自:http://www.cnblogs.com/rainman/archive/2013/05/04/3060428.html 1.概述 名词 笛卡尔积.主 ...
- 面试、笔试中常用的SQL语句(数据库知识必杀)一共50个!!!
Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 ...
- 常用的Hql语句
// HQL: Hibernate Query Language.// 特点:// >> 1,与SQL相似,SQL中的语法基本上都可以直接使用.// >> 2,SQL查询的是表 ...
- 在hibernate3中如何利用HQL语句查询出对象中的部分数据并且返回该对象?
例如现在有一个Customer对象 public class Customer{ private Integer cid; private String cname; private Integer ...
- 工作中常用的sql语句以及知识整理
一.常用的sql语句 1.建表语句 create table tabname(colname1 type1 [not null][primary key], colname2 type2,...) 根 ...
随机推荐
- break、continue、pass介绍
break.continue.pass介绍 break:跳出当前循环 continue:跳出本次循环,进行下一次循环 pass:什么也不做,占位.
- Mysql update 一个表中自己的数据
update table ucf, table t2 set ucf.pcid = t2.pcid where t2.name = 'liming' and t2.gid= ucf.gid and ...
- JS中如何处理多个ajax并发请求?
js中的多并发处理. 通常 为了减少页面加载时间,先把核心内容显示处理,页面加载完成后再发送ajax请求获取其他数据 这时就可能产生多个ajax请求,为了用户体验,最好是发送并行请求,这就产生了并发问 ...
- Spring声明式事务管理(基于注解方式实现)
----------------------siwuxie095 Spring 声明式事务管理(基于注解方式实现) 以转 ...
- asp.net 关于Response.Redirect重定向前无法弹出alert对话框的问题
要实现的功能:某项操作后,使用alert()提示框提示"操作成功"之类的提示,然后使用response.Redirect()来进行页面重定向. 出现的问题:运行代码,操作完成后,直 ...
- Java数据类型与MySql数据类型对照表
这篇文章主要介绍了Java数据类型与MySql数据类型对照表,以表格形式分析了java与mysql对应数据类型,并简单讲述了数据类型的选择与使用方法,需要的朋友可以参考下 本文讲述了Java数据类型与 ...
- [leetcode]785. Is Graph Bipartite? [bai'pɑrtait] 判断二分图
Given an undirected graph, return true if and only if it is bipartite. Example 1: Input: [[1,3], [0, ...
- 在ecplise中创建一个maven工程
1.我们首先需要在Ecplise中配置maven环境,详情见我的博客:https://www.cnblogs.com/wyhluckdog/p/10277278.html 2.maven projec ...
- springmvc与struts2的不同
1.springmv的入口是一个servlet,即前端控制器.而struts2入口是一个fliter过滤器. 2.springmvc是基于开发方法(一个url对应一个方法,通过注解的方式进行访问),请 ...
- ip地址后边加个/8(16,24,32)是什么意思
是掩码的位数,A类IP地址的默认子网掩码为255.0.0.0(由于255相当于二进制的8位1,所以也缩写成“/8”,表示网络号占了8位);B类的为255.255.0.0(/16);C类的为255.25 ...