hibernate查詢語言hql
在hql中關(guān)鍵字不區(qū)分大小寫,但是屬性和類名區(qū)分大小寫
1、簡單屬性查詢 1>如果對單一屬性進(jìn)行查詢,返回結(jié)果集屬性列表,元素類型和實體類中相應(yīng)的屬性類型一致 例子:
由于第1行中的name是String字符串類型,所以第三行對應(yīng)的也要是字符串類型。其他的字段也要保持一致。 2>如果是對多個屬性進(jìn)行查詢,返回的是Object數(shù)組類型,所以其元素類型也要與相對應(yīng)的屬性類型保持一致。 例子:
PS:如果想返回的類型與原來的對象類型保持一致的話,就例子而言就是Student類型,首先先包住Student的POJO類中有Student的兩個id,name參數(shù)的構(gòu)造方法。
注:第一行中的new Student(id,name)很重要,決定返回是Student類型,這樣更對象化,其他第3行也一致。 2、實體查詢 實體查詢中,涉及到對對象的查詢,對于多個記錄,就一般用Querry接口里面的list()和iterate()方法來迭代。 兩種方法的區(qū)別是: 一、list(),對條件符合的數(shù)據(jù)全部一次加載,只發(fā)出一條語句。 二、iterate(),先把符合條件的id全部查詢出來,然后,再根據(jù)里面id數(shù)量,發(fā)出相應(yīng)的sql語句,就是有N條記錄就查詢N+1次。 PS:相對而已,lsit()加載了直接放在一級緩存里面,就是Session里面,從來不使用Session iterate()一開始加載,先從一級緩存里面加載,如果有就只查詢一次,如果沒有就先把符合條件的id全部查詢出來,然后,再根據(jù)里面id數(shù)量,發(fā)出相應(yīng)的sql語句,就是有N條記錄就查詢N+1次。 例子:
注:只發(fā)出一條語句。
注:發(fā)出N+1條語句,因為一級緩存里面沒有相應(yīng)的記錄。
注:只發(fā)出兩條查詢語句,因為list()已經(jīng)把數(shù)據(jù)存在一級緩存里面,對應(yīng)iterate()先從一級緩存里面查找,所以總共只發(fā)出兩條查詢語句。