list方法:當咱們查詢多條記錄的時候咱們使用list結構來接收查詢結果,這時候hibernate會根據咱們設置的lazy值來選擇查詢時機,而一旦查詢了,則是把多條記錄所有查詢出來。sql
iterate方法:當咱們查詢多條記錄的時候使用iterate方法。用一個iterator結構來接收,這時候hibernate也會根據lazy的設置來選擇查詢時機,開始查詢了,並不會把咱們要查詢的全部記錄查詢出來,而是查詢全部記錄的主鍵,只有迭代到哪一個對象再經過該對象的主鍵再進行查詢。session
總結:但咱們查詢的記錄爲N,list方式只執行1條sql語句,而iterate方式則是要看咱們迭代幾條記錄,若是迭代M條記錄,則會執行 M+1條sql語句。測試
例如:spa
測試代碼:.net
@Test public void testIterator01(){ Session session = Util.getSession(); Transaction ts = session.beginTransaction(); List<User> users = session.createCriteria(User.class).list(); for(User u : users){ System.out.println("name:"+u.getUsername()); } ts.commit(); Util.closeSession(); session = Util.getSession(); ts = session.beginTransaction(); String hql = "from User "; Iterator<User> results =session.createQuery(hql).iterate(); for(;results.hasNext();){ System.out.println("name:"+results.next().getUsername()); } ts.commit(); Util.closeSession(); } |