Session 對(duì)象的 .createQuery("HQL語(yǔ)句")
可獲取 Query 對(duì)象
Query query = session.createQuery("HQL語(yǔ)句");
- 此外,將 HQL 查詢語(yǔ)句編寫(xiě)在關(guān)系映射文件時(shí)斤吐,在程序中通過(guò) Session 對(duì)象的
.getNameQuery(String nameQuery)
方法獲取對(duì)應(yīng)查詢語(yǔ)句的 Query 對(duì)象站粟,稱(chēng)為 —— 命名查詢 - Query 對(duì)象的
.setFirstResult(int startIndex)
和.setMaxResult(int num)
方法結(jié)合使用可實(shí)現(xiàn)分頁(yè)功能 - Query 對(duì)象的
.list()
返回 List黍图,.iterate()
返回 Iterator 迭代器,.uniqueResult()
返回單個(gè)持久化對(duì)象 - Query 對(duì)象的
.executeUpdate()
可用于執(zhí)行更新或者刪除(包括批量)// 更新 String hql="update Account set password='123456' where id=:id"; Query query=session.createQuery(hql); query.setInteger("id", 1); int i=query.executeUpdate(); // 刪除 String hql = "DELETE Student WHERE name LIKE :ln"; Query query = session.createQuery(hql); int count = query.executeUpdate();
- HQL 參數(shù)綁定
// 使用 ? String hql="from Student a where a.id=? and a.stuName=?"; Query query=session.createQuery(hql); query.setInteger(0, 3); query.setString(1, "wangwu"); List<Student> list=(List<Student>)query.list();
// 使用名稱(chēng) String hql="from Student a where a.id=:id and a.stuName=:name"; Query query=session.createQuery(hql); query.setInteger("id", 3); query.setString("name", "wangwu"); List<Student> list=(List<Student>)query.list();
- HQL 語(yǔ)句:普通查詢
from Student
- HQL 語(yǔ)句:投影查詢(即查詢類(lèi)的某幾個(gè)屬性)
SELECT id,name FROM Student
- HQL 語(yǔ)句:投影查詢(即查詢類(lèi)的某幾個(gè)屬性)
select new Student(a.stuName,a.age) from Student a
- HQL 語(yǔ)句:設(shè)置別名
// AS 可省略 select stu.id, stu.name from Student AS stu
- HQL 語(yǔ)句:條件查詢
在 where 子句中可以指定:- . 號(hào)
- 比較運(yùn)算符:=奴烙、>助被、>=、<切诀、<=揩环、<> 、is null 幅虑、is not null
- 范圍運(yùn)算符:in (值1, 值2 …) :等于列表中的某一個(gè)值丰滑、not in(值1, 值2 …) :不等于列表中的任意一個(gè)值、between 值1 and 值2 :在值1到值2的范圍內(nèi)(包括值1和值2)翘单、not between 值1 and 值2 :不在值1到值2的范圍內(nèi)
- 字符串模式匹配: like '字符串模式' (字符串模式中可用“%”代表任意長(zhǎng)度的字符串吨枉,“_”代表任意單個(gè)字符)
- 邏輯運(yùn)算: and (與)、 or (或)哄芜、not (非)
- 用于集合的運(yùn)算符:is empty貌亭、is not empty
from Student a where a.id not between 3 and 5
- HQL 語(yǔ)句:去掉重復(fù)記錄
select distinct s.age,s.stuName from Student s
- HQL 語(yǔ)句:對(duì)結(jié)果進(jìn)行排序
// 默認(rèn)為升序 FROM Student AS s ORDER BY s.id DESC
- HQL 語(yǔ)句:HQL 函數(shù)
HQL 常見(jiàn)函數(shù):- 字符串相關(guān):
upper(s)
、lower(s)
认臊、concat(s1, s2)
圃庭、substring(s,offset,length)
、length(s)
失晴、trim([[both|leading|trailing] char [from]] s)
剧腻、locate(search, s, offset)
- 數(shù)字相關(guān):
abs(n)
、sqrt(n)
涂屁、mod(dividend, divisor)
- 集合相關(guān):
size(c)
- 日期時(shí)間相關(guān):
current_date()
书在、current_time()
、current_timestamp()
返回?cái)?shù)據(jù)庫(kù)系統(tǒng)的日期拆又、時(shí)間儒旬、時(shí)間戳,year(d)
帖族、month(d)
栈源、day(d)
、hour(d)
竖般、minute(d)
甚垦、second(d)
從指定的參數(shù)中提取相應(yīng)的值
select new Student(upper(s.stuName)) from Student s
- 字符串相關(guān):
- HQL 語(yǔ)句:聚合函數(shù)
count()
、avg()
涣雕、sum()
艰亮、max()
、min()
select min(s.age) from Student s
- HQL 語(yǔ)句:分組函數(shù)
group by
胞谭、having
select count(s.id),s.clazz from Student s group by s.clazz having avg(s.age)>20 SELECT s.grade, COUNT(*) FROM Student AS s GROUP BY s.grade SELECT s.grade FROM Student AS s GROUP BY s.grade HAVING COUNT(s.id) > 20