Hibernate之查詢中get()和load()的區別,list()和iterate()的區別



【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();
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章