【hibernate】HQL初识

原文链接:http://blog.csdn.net/u012331102/article/details/51540670

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

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

 

FROM 语句

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

 

[java] view plain copy  print?

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

 

 

AS 语句

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

 

[java] view plain copy  print?

  1. <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字段的简单的语法:

 

[java] view plain copy  print?

  1. <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子句的简单的语法:

[java] view plain copy  print?

  1. <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子句的简单的语法:

 

[java] view plain copy  print?

  1. <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>  

 

 

 

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

[java] view plain copy  print?

  1. <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子句的语法很简单:

 

[java] view plain copy  print?

  1. <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子句的简单的语法:

[java] view plain copy  print?

  1. <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子句的简单的语法:

[java] view plain copy  print?

  1. <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>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值