session.createQuery()與createSQLQuery()區別 .
阿新 • • 發佈:2019-01-24
createQuery與createSQLQuery兩者區別是:
前者用的hql語句進行查詢,後者可以用sql語句查詢
前者以hibernate生成的Bean為物件裝入list返回
後者則是以物件陣列進行儲存
所以使用createSQLQuery有時候也想以hibernate生成的Bean為物件裝入list返回,就不是很方便
突然發現createSQLQuery有這樣一個方法可以直接轉換物件
Query query = session.createSQLQuery(sql).addEntity(XXXXXXX.class);
XXXXXXX 代表以hibernate生成的Bean的物件,也就是資料表映射出的Bean。
呵呵以後多注意,還是時不時的要看看hibernate各個物件方法的使用。
還有另外一個相關的小細節應注意:
比如有這樣一個po
PO: User.class
properties: userId,userName
DDL: create table tuser (userid varchar(10),username varchar(20));
當執行:
session.createQuery("from User u").list()時生成的SQL:
select userid,username from tuser;
當執行:
session.createQuery("from User u").iterator()時生成的SQL:
select userid from tuser;
可以看出list()一次將資料從資料庫中讀出直接填充到List中
iterator()將資料的主鍵從資料庫中讀出,當迴圈這個Iterator時才新增執行:
select userid,username from user where userid=?;把資料讀出。
在不同的應用範圍使用不同的方法,具體在hibernate應用中應當注意。
前者用的hql語句進行查詢,後者可以用sql語句查詢
前者以hibernate生成的Bean為物件裝入list返回
後者則是以物件陣列進行儲存
所以使用createSQLQuery有時候也想以hibernate生成的Bean為物件裝入list返回,就不是很方便
突然發現createSQLQuery有這樣一個方法可以直接轉換物件
Query query = session.createSQLQuery(sql).addEntity(XXXXXXX.class);
XXXXXXX 代表以hibernate生成的Bean的物件,也就是資料表映射出的Bean。
呵呵以後多注意,還是時不時的要看看hibernate各個物件方法的使用。
還有另外一個相關的小細節應注意:
比如有這樣一個po
PO: User.class
properties: userId,userName
DDL: create table tuser (userid varchar(10),username varchar(20));
當執行:
session.createQuery("from User u").list()時生成的SQL:
select userid,username from tuser;
當執行:
session.createQuery("from User u").iterator()時生成的SQL:
select userid from tuser;
可以看出list()一次將資料從資料庫中讀出直接填充到List中
iterator()將資料的主鍵從資料庫中讀出,當迴圈這個Iterator時才新增執行:
select userid,username from user where userid=?;把資料讀出。
在不同的應用範圍使用不同的方法,具體在hibernate應用中應當注意。