什么是HQL?
HQL(Hibernate Query Language)是Hibernate查詢(xún)語(yǔ)言、是一種面向?qū)ο蟮牟樵?xún)語(yǔ)言,可以理解繼承、多態(tài)和關(guān)聯(lián)之類(lèi)的概念。
from子句
??1.from cn.hibernate.Dept
????cn.hibernate.Dept是全限定類(lèi)名(包名加類(lèi)名)。
??2.from Dept
????省略了Dept的包名
??3.from Dept as dept
????為出就化類(lèi)Dept指派別名dept,可以在HQL語(yǔ)句中使用這個(gè)別名。
select子句
select子句用于選取對(duì)象和屬性
??1.select dept from Dept as dept
??????select后面跟的是別名dept
??2.select dept.name from Dept as dept
??????select子句選取了一個(gè)屬性name,也可以選取多個(gè)數(shù)據(jù)。這里是屬性名,而不是getName()這個(gè)方法。
where子句
where子句用于表達(dá)式查詢(xún)限制條件
??1.from DistrictEntity wherename = 'SALSE'
??????這條HQL語(yǔ)句用于查詢(xún)名稱(chēng)部門(mén)SALSE的部門(mén)。在where子句中直接使用屬性名。
??2.from DistrictEntity as de where de.name = 'SALES'
??????這條HQL語(yǔ)句用于查詢(xún)名稱(chēng)部門(mén)SALSE的部門(mén)。在where條件中可以使用別名點(diǎn)屬性名的方式來(lái)查詢(xún)。
??3.from DistrictEntity as de where de.name is not null
??????HQL語(yǔ)句用于查詢(xún)地址不為空的部門(mén)。
order by 子句
??1.from DistrictEntity order by id asc
??????這條HQL語(yǔ)句會(huì)查詢(xún)所有數(shù)據(jù),查詢(xún)完成后會(huì)按照升序進(jìn)行排序。
??2.from DistrictEntity order by id asc, name desc
??????會(huì)查詢(xún)所有員工,先按照id進(jìn)行排序,在按照姓名排序。
執(zhí)行HQL語(yǔ)句
??String sql = "from DistrictEntity";//聲明sql語(yǔ)句
??Query query = session.createQuery(sql);//創(chuàng)建Query對(duì)象
??然后在通過(guò)Query對(duì)象的list()與iterator()查詢(xún)。
查詢(xún)語(yǔ)句參數(shù)
???1.按照參數(shù)位置綁定,使用‘?’占位符
??????語(yǔ)法:from DistrictEntity de where de.id = ?
??????Query提供了綁定各種類(lèi)型的參數(shù)和方法,如果參數(shù)為字符串,可調(diào)用setString()。該方法返回一個(gè)Query對(duì)象,也就是說(shuō)可以在該方法后面繼續(xù)的使用其他的方法。有兩個(gè)參數(shù),第一個(gè)參數(shù)可以是int型,為第幾個(gè)參數(shù)從零開(kāi)始;第二個(gè)參數(shù)為String類(lèi)型,為要設(shè)置的值。
???2.按照參數(shù)名稱(chēng)綁定,使用‘:’開(kāi)頭
??????語(yǔ)法:from DistrictEntity de where de.id = :id
??????與占位符相似,已setString()方法為例,第一個(gè)參數(shù)是String類(lèi)型,里面寫(xiě)的是參數(shù)名稱(chēng)id;第二個(gè)參數(shù)設(shè)置值。
額外說(shuō)一下另外兩個(gè)方法:
???1.setParameter():綁定任意類(lèi)型的參數(shù),程序會(huì)根據(jù)你傳入的參數(shù)自動(dòng)識(shí)別。
???2.setProperties():綁定命名參數(shù)與一個(gè)對(duì)象的值屬性,例如我的命名參數(shù)為name,這里就指向你綁定對(duì)象中一個(gè)name屬性。這里要注意,命名參數(shù)與對(duì)象屬性要保持一致。
總結(jié):
???1.HQL語(yǔ)言是面向?qū)ο蟮恼Z(yǔ)言。
???2.HQL中沒(méi)有表和字段的概念,只有類(lèi)、屬性。
