【hibernate】HQL初识

原创 2016年05月30日 20:15:51

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

虽然可以直接使用SQL语句和Hibernate使用原生SQL,但建议使用HQL尽可能避免数据库可移植性的麻烦,并采取Hibernate的SQL生成和缓存策略的优势。都像SELECT,FROM和WHERE等关键字不区分大小写,但如表名和列名的属性是区分在HQL敏感。


FROM 语句

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

<span style="font-size:18px;">String hql = "FROM Employee"; Query query = session.createQuery(hql); List results = query.list();</span>


AS 语句

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

<span style="font-size:18px;">String hql = "FROM Employee AS E"; Query query = session.createQuery(hql); List results = query.list();</span>

SELECT 子句

 

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

<span style="font-size:18px;">String hql = "SELECT E.firstName FROM Employee E"; Query query = session.createQuery(hql); List results = query.list();</span>

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


WHERE 子句

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

<span style="font-size:18px;">String hql = "FROM Employee E WHERE E.id = 10"; Query query = session.createQuery(hql); List results = query.list();</span>

ORDER BY 子句

 

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

<span style="font-size:18px;">String hql = "FROM Employee E WHERE E.id > 10 ORDERBY E.salary DESC"; Query query = session.createQuery(hql); List results =query.list();</span>

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

<span style="font-size:18px;">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();</span>

GROUP BY 子句

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

<span style="font-size:18px;">String hql = "SELECT SUM(E.salary), E.firtName FROMEmployee E " + "GROUP BY E.firstName"; Query query =session.createQuery(hql); List results = query.list();</span>

DELETE 子句

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

<span style="font-size:18px;">String hql = "DELETE FROM Employee " + "WHERE id = :employee_id"; Query query = session.createQuery(hql); query.setParameter("employee_id", 10); int result = query.executeUpdate(); System.out.println("Rows affected: " + result);</span>

INSERT 子句

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

<span style="font-size:18px;">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);</span>







版权声明:那些你不愿意做的事情才能让你真正成长

初识hibernate——hql

hql基本介绍 HQL(HibernateQuery Language)查询提供了丰富的和灵活的查询特性,在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了...
  • laner0515
  • laner0515
  • 2013年11月01日 15:41
  • 2774

hibernate用hql写exists语句,多表关联,中间表无实体类。

之前一直用mybatis,最近接触一个项目用的hibernate,hibernate新手,说句不好听的话:特么蛋疼!好难用啊有木有!好难用啊有木有!好难用啊有木有!重要的话说三遍。 因为distin...
  • Ragin
  • Ragin
  • 2015年09月09日 16:11
  • 6346

hibernate将sql或hql查询结果集映射为实体类 不需要映射文件

感谢glamey兄弟的文章,正好解决了当前遇到的问题。原文链接如下:http://glamey.iteye.com/blog/721019         假设我们现在有一个DTO,其属性包括两...
  • chenghan818
  • chenghan818
  • 2014年03月10日 16:31
  • 4791

《精通Java Web整合开发》随书光盘源码__第12章 初识Java EE轻量级持久化框架Hibernate -- 1

  • 2008年10月19日 13:18
  • 43.38MB
  • 下载

《精通Java Web整合开发》随书光盘源码__第12章 初识Java EE轻量级持久化框架Hibernate -- 2

  • 2008年10月19日 13:21
  • 44.59MB
  • 下载

Hibernate之API初识及增删改查实现案例hibernate003

  • 2014年12月17日 13:23
  • 8.22MB
  • 下载

Hibernate初识(上)

1.CRM项目要说起Hibernate之前,让我们先来了解下CRM项目,那么,什么是CRM?用专业的话来说,CRM(Customer Relationship Management)客户关系管理,是利...
  • Cecilia620
  • Cecilia620
  • 2017年05月31日 22:19
  • 134

千里之行,始于足下之:初识Hibernate

一、综述 Hibernate(对象关系映射框架)是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hib...
  • chenshufeng115
  • chenshufeng115
  • 2015年04月08日 11:40
  • 251

初识Hibernate之增删改查

作为JAVA祖传SSH三大框架的Hibernate,这里做一个简单的小介绍 一、Hibernate 简介 1、什么是 Hibernate Hibernate 是一个开源框架,与 Stru...
  • kxyspace
  • kxyspace
  • 2017年02月13日 21:04
  • 89

初识Hibernate

一、 Hibernate学习一段时间了,暂时告一段落,总结一下。通过这段时间的学习,算是基本入门了,知道了hibernate是个什么样的软件。首先hibernate是个ORM工具, 其hibernat...
  • flyfeifei66
  • flyfeifei66
  • 2011年12月11日 14:07
  • 644
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【hibernate】HQL初识
举报原因:
原因补充:

(最多只允许输入30个字)