`
wangtong40
  • 浏览: 253973 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate HQL语言

    博客分类:
  • ORM
阅读更多

HQL查询
节 10.01    单表HQL查询

FROM CUSTOMERS as customers
 


节 10.02    Where子句
(a)    比较表达式

FROM CUSTOMERS as customers WHERE customers.id=1
FROM CUSTOMERS as customers WHERE customers.amount between 1 and 10
FROM CUSTOMERS as customers WHERE customers.amount >100
FROM CUSTOMERS as customers WHERE customers.email in ('foo@bar','bar@foo')
FROM CUSTOMERS as customers WHERE customers.email IS NULL
FROM CUSTOMERS as customers WHERE customers.email IS NOT NULL
FROM CUSTOMERS as customers WHERE customers.email LIKE '@%'

 

<!----><!---->

 

<!---->

<!----> <!---->

<!----> <!----> <!----> <!----> <!----> <!----> <!----> <!----> <!----> <!----> <!----> <!----> <!----> <!----> <!----> <!----> <!----> <!---->

HQL 操作符

HQL 常用操作符

描述

.

导航路径表达式操作符

+,-

一元正负号

*,/

乘除法

+,-

加减法

=,<>,<,>,>=,<=,[NOT]BETWEEN[NOT] LIKE,[NOT] IN,IS [NOT] NULL,IS [NOT] EMPTY

二元比较操作符

NOT,AND,OR

逻辑操作符


HQL操作符



(b)    HQL常用函数

FROM User u where lower(u.email) = 'foo@163.com' --小写
FROM User u where lower(u.email) = 'foo@163.com' --大写
FROM User u where concat(u.firstname,u.lastname) like 'G% K%' --拼接字符串
FROM User u where size(u.bids) > 3 --集合大小
 

<!----><!----> <!---->

HQL 函数

HQL 常用操作符

描述

UPPER(s),LOWER(s)

大小写

CONCAT(s1,s2)

连接字符串

SUBSTRING(s,offset,length)

取子串

TRIM()

去空格

LENGTH(s)

长度

LOCATE(search,s,offset)

搜索位置

ABS(n),SQRT(n),MOD(dividend,divisor)

绝对值,开方,除法

SIZE

大小写

BIT_LENGTH(s)

位数

CUTTENT_DATE()

当前时间

CURRENT_TIME()

CURRENT_TIMESTAMP()

SECOND(d)

获取时间的不同部分

MINUTE(d)

HOUR(d)

DAY(d)

MONTH(d)

YEAR(d)

CAST(t as TYPE)

类型转换


HQL函数

节 10.03    Order表达式

 

FROM CUSTOMERS as customers WHERE customers.id=1 
ORDER BY customers.id FROM CUSTOMERS as customers 
ORDER BY customers.lastname asc,firstname asc
 


节 10.04    投影查询

SELECT user.username,user.password FROM UserInfo user
 


注:1、在使用Select子句查询时,要给表对象起一个别名。
    2、查询出的结果集是一个Object[]数组。
节 10.05    表关联
(a)    隐式关联连接

FROM User u WHERE u.homeAddress.city = 'BJ'
SELECT distinct u.homeAddress.city FROM User u
FROM Bid bid WHERE bid.item.description like '%FOO%'
 


(b)    普通联结

FROM ITEM i JOIN i.bids b WHERE i.description like '%Foo%' AND b.amount > 100
 
Iterator iterator = query.list().iterator();
while(iterator.hasNext()){
Object[] pair = (Object[])iterator.next();
Item item = (Item)pair[0];
Bid bid = (Bid)pair[1];
}
 

 

SELECT i FROM ITEM i JOIN i.bids b WHERE i.description like '%Foo%' AND b.amount >100
 

 

Iterator iterator = query.list().iterator();
while(iterator.hasNext()){
Item item = (Item)i.next();}
 
FROM ITEM i LEFT JOIN i.bids b WITH b.amount >1000 WHERE i.description
 like '%Foo%' --WITH额外联结条件
 


(c)    抓取联结
fetch 连接允许仅使用一个select语句就将关联的对象或一组集合随他们父对象的初始化而初始化。

FROM ITEM i LEFT JOIN FETCH i.bids WHERE i.description LIKE '%Foo%'
 


注:普通联结同抓取联结的区别:
1、    生成的SQL语句虽然有连接,但是并没有取连接表的数据,还是需要单独的sql取数据。
2、    抓取联结一次性将所需要的数据装入内存中。
3、    当lazy=true时,抓取策略失效。
节 10.06    报表查询
(a)    统计函数投影

SELECT COUNT(user.id), MAX(user.id), SUM(user.id),MIN(user.id),AVG(user.score)  
FROM UserInfo user
 


注:因为属于投影查询所以返回的结果为Object[]数组
(b)    分组

SELECT u.lastname,count(u) FROM User u group by u.lastname
SELECT bid.item.id,avg(bid.amount) FROM Bid bid GROUP BY bid.item.id
SELECT bid.item.id,count(bid),avg(bid.amount) 
FROM Bid bid WHERE bid.item.successfulBid IS NULL GROUP BY bid.item.id
SELECT bidItem.id,count(bid),avg(bid.amount)
 FROM Bid bid JOIN bid.item bidItem WHERE bidItem.successfulBid IS NULL GROUP BY bidItem.id
SELECT item.id,count(bid),avg(bid.amount) 
FROM Item item JOIN item.bids.bid WHERE item.successfulBid IS NULL 
GROUP BY item.id HAVING count(bid) >10
 


节 10.07    子查询

FROM User u WHERE 10 < (SELECT count(i) from u.items i where i.successfulBid IS NOT NULL)
FROM Item i WHERE 100 > all(SELECT b.amount FROM i.bids b) --出价小于100
FROM Item i WHERE 100 > any(SELECT b.amount FROM i.bids b) --出价大于100
FROM Item i WHERE 100 > some(SELECT b.amount FROM i.bids b)  --出价等于100
FROM Item i WHERE 100 IN (SELECT b.amount FROM i.bids b)  --出价等于100
 

 

20
2
分享到:
评论
1 楼 volking 2010-06-08  
函数要小写,被你害死

相关推荐

    精通hibernate HQL语言

    在深入探讨Hibernate的HQL语言之前,我们先理解一下什么是HQL。HQL,全称Hibernate Query Language,是Hibernate框架提供的一种面向对象的查询语言,它的语法结构与SQL相似,但主要针对对象和实体进行操作,而不是...

    hibernateHQL关联查询

    其中,HQL(Hibernate Query Language)作为Hibernate提供的查询语言之一,允许开发者以接近面向对象的方式编写查询语句。本文将重点介绍Hibernate中的关联查询,并深入探讨HQL关联查询的实现原理及应用场景。 ####...

    Hibernate查询语言HQL.PPT

    Hibernate 查询语言 HQL Hibernate 查询语言 HQL 是一种面向对象的查询语言,用于检索对象。它提供了灵活多样的查询机制,包括导航对象图、通过标识符检索、使用 HQL 检索对象、使用 Hibernate 条件 API 和使用本地...

    Hibernate hql查询语法总结

    其内置的HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者以类和对象的方式进行数据查询。本文将对Hibernate HQL查询语法进行总结,涵盖基础查询、属性查询、实例化查询以及查询链接等多个...

    HibernateHQL.zip_更新

    此压缩包中的`HibernateHQL.chm`文件很可能是Hibernate HQL的详细教程或参考手册,包含了HQL的语法、用法示例、最佳实践以及可能遇到的问题解决方案。它可以帮助开发者深入理解如何在实际项目中高效地使用HQL进行...

    Hibernate-HQL.rar_HQL_hibernate hql

    本篇文档将深入探讨Hibernate中的HQL(Hibernate Query Language),一种面向对象的查询语言,它提供了与SQL类似的语法,但更贴近于面向对象的思维模式,使得开发者可以更加便捷地进行数据查询。 一、HQL简介 HQL是...

    Hibernate HQL.txt

    Hibernate HQL是一种面向对象的查询语言,它允许开发人员以一种更加自然的方式来表达数据库查询,而无需直接编写SQL语句。HQL提供了类似于SQL的强大查询能力,但更符合面向对象编程的思维方式,这使得它在处理持久化...

    Hibernate HQL 结合 velocity

    **Hibernate HQL(Hibernate Query Language)** 是Hibernate提供的一个面向对象的查询语言,类似于SQL,但它是针对对象模型设计的。HQL允许开发者使用类和属性的名字而不是表和列名进行查询,从而降低了对底层...

    Hibernate 课件_HQL

    - **定义**: HQL(Hibernate Query Language)是一种面向对象的查询语言,它的语法类似于SQL,但不同于直接操作数据库表,HQL操作的是持久化的Java对象。这意味着在编写查询时,可以使用Java对象模型中的类名和属性...

    Hibernate HQL.doc

    Hibernate HQL,全称为Hibernate Query Language,是Hibernate框架中用于对象关系映射(ORM)的查询语言。HQL的设计目标是提供一种面向对象的查询方式,使得开发者能够以类和对象的角度来操作数据库,而不是直接使用...

    Hibernate查询语言HQL

    Hibernate查询语言HQL

    hibernate hql where语句拼接工具类

    HQL(Hibernate Query Language)是Hibernate提供的一个SQL的面向对象的查询语言,它使得开发者可以避免直接编写SQL语句,从而更好地进行数据库操作。本文将深入探讨“hibernate hql where语句拼接工具类”,并结合...

    hibernate hql基本操作

    HQL,即Hibernate Query Language,是Hibernate提供的一种强大的查询语言。虽然它的语法结构看起来与SQL类似,但其实质上是一种面向对象的语言,能够理解并处理诸如继承、多态及关联等概念。 #### 二、HQL的基本...

    Hibernate HQL查询语句总结.docx

    Hibernate HQL 查询语句是 Hibernate 框架中的一种查询语言,它提供了更加丰富的和灵活的查询特性,具有类似标准 SQL 语句的查询方式,同时也提供了更加面向对象的封装。以下是 Hibernate HQL 查询语句的知识点总结...

    Hibernate HQL详解.docx

    Hibernate HQL,全称为Hibernate Query Language,是Hibernate框架中用于操作数据库的一种面向对象的查询语言。它允许开发者用面向对象的方式来编写查询语句,极大地提高了开发效率和代码的可读性。以下是对HQL的...

    另类查询 Hibernate HQL 深度历险

    【Hibernate HQL 深度历险】是一个关于掌握Hibernate查询语言高级特性的技术主题。Hibernate Query Language(HQL)是Hibernate框架提供的面向对象的查询语言,它与SQL类似但针对对象模型,允许开发者直接查询对象而...

    hibernateHQL基本查询

    HQL (Hibernate Query Language) 是一种面向对象的查询语言,由 Hibernate 官方提供,用于简化数据库查询过程。与传统的 JDBC 方式相比,使用 HQL 进行数据库查询更加便捷、高效且易于维护。 #### 二、HQL 与 SQL ...

    HQL Hibernate查询语言

    HQL Hibernate查询语言,HQL的学习和参考的文档,开发必备。

    Hibernate HQL查询 分页查询 模糊查询.docx

    HQL(Hibernate Query Language)是一种面向对象的查询语言,它允许开发者使用类及其属性来编写查询语句,而不是传统的SQL语句。这使得开发人员能够更加专注于业务逻辑而不用深入到SQL层面。HQL支持各种复杂的查询,...

Global site tag (gtag.js) - Google Analytics