HQL(Hibernate Query Language):是面向?qū)ο蟮牟樵冋Z(yǔ)句,它的語(yǔ)法和SQL語(yǔ)句有些相像,在運(yùn)行時(shí)才得以解析.HQL并不像SQL那樣是數(shù)據(jù)操作語(yǔ)言,它用來(lái)取得對(duì)象,而不是進(jìn)行update,delete和insert操作. HQL 是一門對(duì)大小寫不敏感的的語(yǔ)言,所以SeLect與SELECT和sELeCT是相同的.
student 表中有五個(gè)字段,分別是:id,name,cardId,age,team_id; Student 是一個(gè)對(duì)象,student 是數(shù)據(jù)庫(kù)中的一個(gè)表. 查詢所有的Student對(duì)象時(shí),最簡(jiǎn)單的HQL語(yǔ)句是: from Student,也可以寫成 select s from Student (as)s. 注:這的as可以省略
遍歷Student Query query=session.createQuery("form Student"); //注: 如果Student對(duì)象不是唯一的,那么需要寫上包名,如: from test.Student test為包名. 注意: 如果執(zhí)行HQL語(yǔ)句"from Student,Course",并不時(shí)單單返回兩個(gè)對(duì)象,而是返回兩個(gè)對(duì)象的笛卡爾積,這類似SQL語(yǔ)句中字段的全外連接.實(shí)際的應(yīng)用中,"from Student,Course"這種語(yǔ)句幾乎是不回出現(xiàn)的.
----單個(gè)屬性查詢: ----多個(gè)屬性查詢: Query query=session.createQuery("select s.name,s.age form Student s");
實(shí)例化查詢結(jié)果可以說(shuō)是對(duì)屬性查詢的一重改進(jìn).在使用屬性查詢時(shí)由于使用對(duì)象數(shù)組,操作和理解不太方便,如果將以個(gè)Object[]中的成員封裝成一個(gè)對(duì)象就方便多了. Query query=session.createQuery("select new Student(s.name,s.age) form Student s"); 注:運(yùn)行這個(gè)程序的時(shí)候,需要一個(gè)new Student(s.name,s.age)構(gòu)造函數(shù).在Student.java中編寫這個(gè)構(gòu)造函數(shù).
4:查詢鏈接: 與SQL查詢一樣,HQL也支持連接查詢,如內(nèi)連接,外連接和交叉連接.支持的鏈接類型是從ANSI SQL中借鑒來(lái)的. 1: inner jion (內(nèi)連接) inner jion 可以簡(jiǎn)寫為join. 正常情況下必須要建關(guān)聯(lián)。
1: count() 統(tǒng)計(jì)記錄的條數(shù) //取得Student的數(shù)量 //avg()取得Student平均年齡 //upper()方法將字符串轉(zhuǎn)為大寫 //去除重復(fù)行distinct
from Team t where 22<all(select s.age from Student s) from Team t where all(select s.age from t.student s)>22
update() Student stu=(Student)session.get(Student.class,"id"); //根據(jù)id 得到stu對(duì)象
delete() Student stu=(Student)session.get(Student.class,"id"); //根據(jù)id 得到stu對(duì)象 |
|
來(lái)自: WindySky > 《hibernate》