`
wangtong40
  • 浏览: 248748 次
  • 性别: 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语言

    精通HQL.doc精通HQL.doc精通HQL.doc精通HQL.doc精通HQL.doc

    Hibernate查询语言HQL.PPT

    Hibernate查询语言HQL.PPT

    hibernate-hql 资料大全

    hibernate hql 语言大全 hql学习,这个文档是一个很全面,很不错的

    hibernate hql语句

    hibernate hql语句 hql语言汇总

    hibernate 的HQL 语言入门与提高

    hibernate 的HQL 语言入门与提高

    Hibernate查询语言HQL

    Hibernate查询语言HQL

    HQL Hibernate查询语言

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

    hibernate查询语言--HQL

    hibernate 查询语言 HQL的使用详解及实例, 个人笔记,适合初学者

    Hibernate HQL查询.docx

    Hibernate 配备了一种非常强大的查询语言,这种语言看上去很像 SQL。但是不要被语法结构上的相似所迷惑,HQL 是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态和关联之类的概念。

    Hibernate查询语言(HQL) 语法参考

    HQL中文语法参考, 详细描述hibernate 查询语言的各种语法,是不可多得的HQL中文参考资料!

    hibernate hql 大全

    此书对Hibernate的查询语言hql进行详细的介绍,用来做工具书还是很不错的。

    Hibernate查询语言(HQL)

    Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。

    hibernate查询语言hql

    NULL 博文链接:https://iblike.iteye.com/blog/795755

    Hibernate HQL精华

    通俗的语言加简洁的实例,快速带你进入HQL殿堂!!

    Hibernate之HQL查询

    HQL查询是一种面向对象的查询语言,其中没有表和字段的概念,只有类、对象和属性的概念,HQL 是应用较为广泛的方式.这是本人对HQL知识点做的一个总结性的练习

    论文研究-ANTLR技术及其在HQL语言编译中的应用 .pdf

    ANTLR技术及其在HQL语言编译中的应用,徐骁栋,,本文分析了当前比较流行的编译工具ANTLR,并结合编译技术研究了ANTLR的特性和功能,最后给出了ANTLR编译器在开源框架Hibernate中的HQL查询

    HQL:Hibernate Qusery Language

    HQL:Hibernate Qusery Language HQL :是面向对象的查询语言,同SQL有些相似是Hib中最常用的方式。 查询设定各种查询条件。 支持投影查询,检索出对象的部分属性。 支持分页查询,允许使用having和group by 提供内...

    HQL语法大全,并带有详细的例子

    HQL是完全面向对象的查询语言,因此可以支持继承和多态等特征。HQL查询依赖于Query类,每个Query实例对应一个查询对象,使用HQL查询按 如下步骤进行: (1)获取Hibernate Session对象; (2)编写HQL语句; (3)以HQL...

Global site tag (gtag.js) - Google Analytics