HQL 操作符


HQL 常用操作符 描述
. 导航路径表达式操作符
+,- 一元正负号
*,/ 乘除法
+,- 加减法
=,<>,<,>,>=,<=,[NOT]BETWEEN[NOT] LIKE,[NOT] IN,IS [NOT] NULL,IS [NOT] EMPTY 二元比较操作符


NOT,AND,OR 逻辑操作符

HQL操作符



(b)    HQL常用函数
Sql代码
1. FROM User u where lower(u.email) = '[email protected]' --小写 
2. FROM User u where lower(u.email) = '[email protected]' --大写 
3. FROM User u where concat(u.firstname,u.lastname) like 'G% K%' --拼接字符串 
4. 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表达式

Sql代码
1. FROM CUSTOMERS as customers WHERE customers.id=1  
2. ORDER BY customers.id FROM CUSTOMERS as customers  
3. ORDER BY customers.lastname asc,firstname asc 
 

节 10.04    投影查询
Sql代码
1. SELECT user.username,user.password FROM UserInfo user 
 

注:1、在使用Select子句查询时,要给表对象起一个别名。
    2、查询出的结果集是一个Object[]数组。
节 10.05    表关联
(a)    隐式关联连接
Sql代码
1. FROM User u WHERE u.homeAddress.city = 'BJ' 
2. SELECT distinct u.homeAddress.city FROM User u 
3. FROM Bid bid WHERE bid.item.description like '%FOO%' 
 

(b)    普通联结
Sql代码
1. FROM ITEM i JOIN i.bids b WHERE i.description like '%Foo%' AND b.amount > 100 
 
Java代码
1. Iterator iterator = query.list().iterator(); 
2. while(iterator.hasNext()){ 
3. Object[] pair = (Object[])iterator.next(); 
4. Item item = (Item)pair[0]; 
5. Bid bid = (Bid)pair[1]; 
6. } 
 

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

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

(c)    抓取联结
fetch 连接允许仅使用一个select语句就将关联的对象或一组集合随他们父对象的初始化而初始化。
Sql代码
1. FROM ITEM i LEFT JOIN FETCH i.bids WHERE i.description LIKE '%Foo%' 
 

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

注:因为属于投影查询所以返回的结果为Object[]数组
(b)    分组
Sql代码
1. SELECT u.lastname,count(u) FROM User u group by u.lastname 
2. SELECT bid.item.id,avg(bid.amount) FROM Bid bid GROUP BY bid.item.id 
3. SELECT bid.item.id,count(bid),avg(bid.amount)  
4. FROM Bid bid WHERE bid.item.successfulBid IS NULL GROUP BY bid.item.id 
5. SELECT bidItem.id,count(bid),avg(bid.amount) 
6. FROM Bid bid JOIN bid.item bidItem WHERE bidItem.successfulBid IS NULL GROUP BY bidItem.id 
7. SELECT item.id,count(bid),avg(bid.amount)  
8. FROM Item item JOIN item.bids.bid WHERE item.successfulBid IS NULL  
9. GROUP BY item.id HAVING count(bid) >10 
 

节 10.07    子查询
Sql代码
1. FROM User u WHERE 10 < (SELECT count(i) from u.items i where i.successfulBid IS NOT NULL) 
2. FROM Item i WHERE 100 > all(SELECT b.amount FROM i.bids b) --出价小于100 
3. FROM Item i WHERE 100 > any(SELECT b.amount FROM i.bids b) --出价大于100 
4. FROM Item i WHERE 100 > some(SELECT b.amount FROM i.bids b)  --出价等于100 
5. FROM Item i WHERE 100 IN (SELECT b.amount FROM i.bids b)  --出价等于100 

猜你喜欢

转载自wangxr66.iteye.com/blog/1544221
HQL