Hibernate查询语言(HQL)是一种面向对象的查询语言,类似于SQL,但不是对表和列操作,HQL适用于持久对象和它们的属性。 HQL查询由Hibernate转换成传统的SQL查询,这在圈上的数据库执行操作。

虽然可以直接使用SQL语句和Hibernate使用原生SQL,但建议使用HQL尽可能避免数据库可移植性的麻烦,并采取Hibernate的SQL生成和缓存策略的优势。

都像SELECT,FROM和WHERE等关键字不区分大小写,但如表名和列名的属性是区分在HQL敏感。

FROM 语句
使用FROM子句,如果要加载一个完整的持久化对象到内存中。下面是一个使用FROM子句的简单的语法:

1 String hql = "FROM Employee";//Employee 是实体类名,严格区分大小写
2 Query query = session.createQuery(hql);
3 List results = query.list();

如果需要完全限定在HQL一个类名,只需指定如下的包和类名:

1 String hql = "FROM com.shuyinghengxie.haha.Employee";
2 Query query = session.createQuery(hql);
3 List results = query.list();

AS 语句
AS子句可以用来别名分配给类中的HQL查询,特别是当有很长的查询。例如,我们前面简单的例子是以下几点:

String hql = "FROM Employee AS E";
Query query = session.createQuery(hql);
List results = query.list();

AS关键字是可选的,也可以直接在之后的类名指定别名,如下所示:

1 String hql = "FROM Employee E";
2 Query query = session.createQuery(hql);
3 List results = query.list();

SELECT 子句
SELECT子句提供了更多的控制权比from子句的结果集。如果想获得对象而不是整个对象的几个属性,使用SELECT子句。下面是一个使用SELECT语句来获取Employee对象只是FIRST_NAME字段的简单的语法:

String hql = "SELECT E.firstName FROM Employee E";
Query query = session.createQuery(hql);
List results = query.list();

值得注意的是在这里,Employee.firstName是Employee对象的一个属性,而不是EMPLOYEE表的一个字段。

WHERE 子句
如果想缩小了从存储返回的特定对象,可以使用WHERE子句。下面是一个使用WHERE子句的简单的语法:

String hql = "FROM Employee E WHERE E.id = 10";
Query query = session.createQuery(hql);
List results = query.list();

ORDER BY 子句
若要排序HQL查询的结果,将需要使用ORDER BY子句。您可以在结果集按升序(ASC)或降序(DESC)通过在对象的任何属性排序结果。下面是一个使用ORDER BY子句的简单的语法:

String hql = "FROM Employee E WHERE E.id > 10 ORDER BY E.salary DESC";
Query query = session.createQuery(hql);
List results = query.list();

如果想通过一个以上的属性进行排序,你会仅仅是额外的属性添加到由子句用逗号隔开,如下所示的命令的结尾:

String hql = "FROM Employee E WHERE E.id > 10 " +
"ORDER BY E.firstName DESC, E.salary DESC ";
Query query = session.createQuery(hql);
List results = query.list();

GROUP BY 子句
该子句允许从Hibernate的它基于属性的值的数据库和组提取信息,并且通常使用结果包括总值。下面是一个使用GROUP BY子句的语法很简单:

String hql = "SELECT SUM(E.salary), E.firtName FROM Employee E " +
"GROUP BY E.firstName";
Query query = session.createQuery(hql);
List results = query.list();

使用命名参数
Hibernate命名在其HQL查询参数支持。这使得编写接受来自用户的输入容易,不必对SQL注入攻击防御HQL查询。下面是一个使用命名参数的简单的语法:

String hql = "FROM Employee E WHERE E.id = :employee_id";
Query query = session.createQuery(hql);
query.setParameter("employee_id",10);
List results = query.list();

UPDATE 子句
批量更新是新的HQL与Hibernate3,以及不同的删除工作,在Hibernate 3和Hibernate2一样。 Query接口现在包含一个名为executeUpdate()方法用于执行HQL UPDATE或DELETE语句。

在UPDATE子句可以用于更新一个或多个对象中的一个或多个属性。下面是一个使用UPDATE子句的简单的语法:

1 String hql = "UPDATE Employee set salary = :salary " +
2 "WHERE id = :employee_id";
3 Query query = session.createQuery(hql);
4 query.setParameter("salary", 1000);
5 query.setParameter("employee_id", 10);
6 int result = query.executeUpdate();
7 System.out.println("Rows affected: " + result);

DELETE 子句
DELETE子句可以用来删除一个或多个对象。下面是一个使用DELETE子句的简单的语法:

1 String hql = "DELETE FROM Employee " +
2 "WHERE id = :employee_id";
3 Query query = session.createQuery(hql);
4 query.setParameter("employee_id", 10);
5 int result = query.executeUpdate();
6 System.out.println("Rows affected: " + result);

INSERT 子句
HQL支持INSERT INTO子句中只记录在那里可以插入从一个对象到另一个对象。以下是使用INSERT INTO子句的简单的语法:

String hql = "INSERT INTO Employee(firstName, lastName, salary)" +
"SELECT firstName, lastName, salary FROM old_employee";
Query query = session.createQuery(hql);
int result = query.executeUpdate();
System.out.println("Rows affected: " + result);

HQL查询语言——转载(http://www.cnblogs.com/20gg-com/p/6045739.html)的更多相关文章

  1. Uiautomator ——API详解(转载http://www.cnblogs.com/by-dream/p/4921701.html)

    转载来源: 简单的例子 以一个简单的例子开始吧.我们完成一个 " 打开QQ,进入QQ空间,然后退出 " 的case. 代码如下: package QQ; import java.i ...

  2. HQL查询语言的使用介绍

    @SuppressWarnings("deprecation") public class HibernateUtil { private static final Session ...

  3. JVM学习(1)——通过实例总结Java虚拟机的运行机制-转载http://www.cnblogs.com/kubixuesheng/p/5199200.html

    JVM系类的文章全部转载自:http://www.cnblogs.com/kubixuesheng/p/5199200.html 特别在此声明.那位博主写的真的很好 ,感谢!! 俗话说,自己写的代码, ...

  4. .Net导出pdf文件,C#实现pdf导出 转载 http://www.cnblogs.com/hmYao/p/5842958.html

    导出pdf文件. 在编码前需要在网上下载个itextsharp.dll,此程序集是必备的.楼主下载的是5.0版本,之前下了个5.4的似乎不好用. 下载之后直接添加引用. <%@ Page Lan ...

  5. c# 和 java <转载>http://www.cnblogs.com/zhucai/archive/2011/02/16/csharp-compare-java.html

    从语法层面来讲,c# 和 java 是非常相似的. <转载> 这篇文章对C#与Java做一个语言级的对比,方便C#转Java或Java转C#的人有个大致了解.这里大致用C#3.0与Java ...

  6. ASP.NET MVC学习系列(二)-WebAPI请求 转载https://www.cnblogs.com/babycool/p/3922738.html

    继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用Jquery 来发起异步请求实现 ...

  7. AutoMapper用法 转载https://www.cnblogs.com/youring2/p/automapper.html

    AutoMapper是对象到对象的映射工具.在完成映射规则之后,AutoMapper可以将源对象转换为目标对象. 配置AutoMapper映射规则 AutoMapper是基于约定的,因此在实用映射之前 ...

  8. Bootstrap-table 使用总结 转载https://www.cnblogs.com/laowangc/p/8875526.html

    一.什么是Bootstrap-table? 在业务系统开发中,对表格记录的查询.分页.排序等处理是非常常见的,在Web开发中,可以采用很多功能强大的插件来满足要求,且能极大的提高开发效率,本随笔介绍这 ...

  9. 前端小知识(转载http://www.cnblogs.com/Wayou/p/things_you_dont_know_about_frontend.html)

    前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...

随机推荐

  1. Area区域

    1.mvc4.0新增的area区域机制,可以协助你在架构较为大型的项目,让独立性较高的部分功能独立成一个MVC子网站,以降低网站与网站之间的耦合性,也可以通过area的切割,让多人同时开发同一个项目时 ...

  2. 【转载】【树形DP】【数学期望】Codeforces Round #362 (Div. 2) D.Puzzles

    期望计算的套路: 1.定义:算出所有测试值的和,除以测试次数. 2.定义:算出所有值出现的概率与其乘积之和. 3.用前一步的期望,加上两者的期望距离,递推出来. 题意: 一个树,dfs遍历子树的顺序是 ...

  3. JQuery 1.8.3对IE9兼容问题getAttribute

    jQuery1.8.3在IE9下attr报错问题 jQuery1.8.3在IE9中attr方法保存. 解决方案如下: r = e.getAttribute(n); 修改为: r = e.getAttr ...

  4. git 笔记

    查看某个提交的修改:git show commitID 查看某个提交修改涉及的文件:git show commitID --oneline --name-status 清理掉没有入库的文件,并把修改了 ...

  5. js生成验证码并检验

    <html> <head> <title>验证码</title> <style type="text/css"> #co ...

  6. 修改centos启动项

    centos7下修改启动项在路径/etc/grub.d/文件路径下,修改完成之后需要运行命令 grub2-mkconfig --output=/boot/grub2/grub.cfg

  7. memset 究竟在做什么?

    我要 一字节一字节 地 memory set

  8. iOS Developer:真机测试

    如果出现ios development一项为灰色不可点击状态,苹果的说法是 如果您要为此电脑添加证书,请revoke以前的证书后添加,或者通过以前的mac导出证书 原文不记得了,大概这个意思,苹果不希 ...

  9. oracle数据库常用查询

    一.数据库信息 1.数据库时间 select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') AS dbtime from dual; 2.主机OS类型 SELEC ...

  10. 多线程_先产后销_运行结果有BUG

    class Shop { public static void main(String[] args) { Things t=new Things(); Custom c=new Custom(t); ...