常會使用到這兩個查詢方式,
網路查詢到的資料有些不是很正確,
這邊分享一些自己看Hibernate實戰的心得,
查詢方式
list():
只會送出一條SQL,將結果集都存在一級和二級緩存(有開的話),
但是不會使用緩存,也就是說你每次執行這個方法都丟出一個SQL給資料庫。
iterator():
第一次查詢時會把所有的id查出來,
等到真正要調用對象的時候,會先看緩存有沒有(一、二級),
沒有的話才會去資料庫調用,
有可能會造成N+1條SQL查詢,
且返回的對象為代理對象。
實際應用
在使用上你可以用下面的code達到一條SQL查詢,
但仍然可以使用iterator的模式,
Session session=sf.openSession(); Query query=session.createQuery("from Employee"); List list=query.list(); Iterator it=list.iterator();
第一次list的查詢會填充一、二級緩存,
而iterator就可以調用其中的緩存資料,
也不會產生N+1條SQL去向資料庫查詢資料。
沒有留言:
張貼留言