博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HQL查询语言——转载(http://www.cnblogs.com/20gg-com/p/6045739.html)
阅读量:6418 次
发布时间:2019-06-23

本文共 3472 字,大约阅读时间需要 11 分钟。

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);

转载于:https://www.cnblogs.com/jingzhenhua/p/6045810.html

你可能感兴趣的文章
缓存算法
查看>>
Windows 8 动手实验系列教程 实验5:进程生命周期管理
查看>>
Android开发计划
查看>>
application/x-www-form-urlencoded接口响应报文中文乱码
查看>>
SpringMVC 简介及入门案例
查看>>
物联网硬件安全分析基础-硬件分析初探
查看>>
4、javascript中各种提示框的使用
查看>>
POJ3525 Most Distant Point from the Sea
查看>>
Activity与Service通信(不同进程之间)
查看>>
《数据库系统概论》第九章笔记
查看>>
纸牌游戏(队列)
查看>>
[转载]Jmeter那点事·ForEach和If控制器
查看>>
一种解决eclipse中安装maven出错的方法
查看>>
近几年杭电OJ大型比赛题目合集【更新到2017年11月初】
查看>>
SQLServer中日期与字符串之间的互相转换及日期格式
查看>>
hdu4417
查看>>
走近docker——ubuntu server 18.04上初体验
查看>>
jmeter 使用ANT运行 设置自动停止时间
查看>>
Django框架----在Python脚本中调用Django环境
查看>>
爬虫----selenium模块
查看>>