【Hibernate】之查詢中get()和load()的區別,list()和iterate()的區別
list()查詢
//一次性把數據對象取出來 @Test public void findTestList(){ Session s=sessionFactory.getCurrentSession(); s.beginTransaction(); List<Person> persons=s.createQuery("from Person").list(); for(Person person:persons){ System.out.println(person.getName()+"----"+person.getId()); } s.getTransaction().commit(); }
sql語句如下:
16:00:43,118 DEBUG SQL:111 - select person0_.id as id1_, person0_.p_age as p2_1_, person0_.group_id as group4_1_, person0_.p_name as p3_1_ from p_person person0_ 張三0----1 張三1----2 張三2----3 張三3----4 張三4----5 張三5----6 張三6----7 張三7----8 張三8----9 張三9----10
iterate()查詢
//一次性取出來的是所有對象的主鍵值,並且會把這些主鍵值放在Session緩衝中去 //下次需要的話,直接在Session中獲取,不需要再次訪問數據庫 //缺點是將查詢出來的主鍵值,分別再以主鍵進行取值對象,造成數據庫壓力巨大 @Test public void findTestIterate(){ Session s=sessionFactory.getCurrentSession(); s.beginTransaction(); Iterator<Person> persons=s.createQuery("from Person").iterate(); while(persons.hasNext()){ System.out.println(persons.next().getName()); } s.getTransaction().commit(); }
sql語句
16:03:55,776 DEBUG SQL:111 - select person0_.id as col_0_0_ from p_person person0_ 16:03:55,806 DEBUG SQL:111 - select person0_.id as id1_0_, person0_.p_age as p2_1_0_, person0_.group_id as group4_1_0_, person0_.p_name as p3_1_0_ from p_person person0_ where person0_.id=? 張三0 16:03:55,823 DEBUG SQL:111 - select person0_.id as id1_0_, person0_.p_age as p2_1_0_, person0_.group_id as group4_1_0_, person0_.p_name as p3_1_0_ from p_person person0_ where person0_.id=? 張三1 16:03:55,826 DEBUG SQL:111 - select person0_.id as id1_0_, person0_.p_age as p2_1_0_, person0_.group_id as group4_1_0_, person0_.p_name as p3_1_0_ from p_person person0_ where person0_.id=? 張三2 16:03:55,832 DEBUG SQL:111 - select person0_.id as id1_0_, person0_.p_age as p2_1_0_, person0_.group_id as group4_1_0_, person0_.p_name as p3_1_0_ from p_person person0_ where person0_.id=? 張三3 16:03:55,836 DEBUG SQL:111 - select person0_.id as id1_0_, person0_.p_age as p2_1_0_, person0_.group_id as group4_1_0_, person0_.p_name as p3_1_0_ from p_person person0_ where person0_.id=? 張三4 16:03:55,838 DEBUG SQL:111 - select person0_.id as id1_0_, person0_.p_age as p2_1_0_, person0_.group_id as group4_1_0_, person0_.p_name as p3_1_0_ from p_person person0_ where person0_.id=? 張三5 16:03:55,841 DEBUG SQL:111 - select person0_.id as id1_0_, person0_.p_age as p2_1_0_, person0_.group_id as group4_1_0_, person0_.p_name as p3_1_0_ from p_person person0_ where person0_.id=? 張三6 16:03:55,844 DEBUG SQL:111 - select person0_.id as id1_0_, person0_.p_age as p2_1_0_, person0_.group_id as group4_1_0_, person0_.p_name as p3_1_0_ from p_person person0_ where person0_.id=? 張三7 16:03:55,846 DEBUG SQL:111 - select person0_.id as id1_0_, person0_.p_age as p2_1_0_, person0_.group_id as group4_1_0_, person0_.p_name as p3_1_0_ from p_person person0_ where person0_.id=? 張三8 16:03:55,875 DEBUG SQL:111 - select person0_.id as id1_0_, person0_.p_age as p2_1_0_, person0_.group_id as group4_1_0_, person0_.p_name as p3_1_0_ from p_person person0_ where person0_.id=? 張三9
get()查詢
//立刻發送sql語句,不管我們是否需要,比如person.getName(); @Test public void findTestget(){ Session s=sessionFactory.getCurrentSession(); s.beginTransaction(); Person person=(Person)s.get(Person.class, 1); // System.out.println(person.getName()); s.getTransaction().commit(); }
load()查詢
//不會立刻發送sql語句,只有當我們需要的時候纔會發送sql語句,比如person.getName(); @Test public void findTestload(){ Session s=sessionFactory.getCurrentSession(); s.beginTransaction(); Person person=(Person)s.load(Person.class, 1); // System.out.println(person.getName()); s.getTransaction().commit(); }