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();
	}
时间: 2024-08-04 10:18:54

Hibernate之查询中get()和load()的区别,list()和iterate()的区别的相关文章

Hibernate中get和load

首先观察这样一个实验  Student stu=(Student) session.get(Student.class, 1); //切换这个位置  System.out.println("--------------------------------我是华丽丽的风格线----------------------------------------------------");  System.out.println(stu.getStuName()); 当使用load方法来得到一个

hibernate mapping文件中 xmlns会导致linq to xml 查询不到对应的节点

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Linq; using System.Xml.Linq; using System.Xml; using System.Windows.Forms; namespace ConsoleApplication27 { class Program

【hibernate】Hibernate中get()和load()的区别

Hibernate中根据Id单条查询获取对象的方式有两种,分别是get()和load(),来看一下这两种方式的区别. 1. get() 使用get()来根据ID进行单条查询: 1 User user=session.get(User.class, "1"); 当get()方法被调用的时候就会立即发出SQL语句: 1 2 3 4 5 6 7 8 9 10 11 Hibernate:     select         user0_.ID as ID1_1_0_,         use

hibernate中get和load区别

在日常开发中,获取数据时必不可少的,这样就要用到get和load方法来实现了.下面简单说一下get和load的区别. 1.返回值不同 使用get方法检索数据时,没有该数据返回值为null. 而使用load方法时,则返回org.hibernate.ObjectNotFoundException异常,如下: 2.检索机制不同 get方法和find方法都是直接从数据库中检索 而load方法的执行则比较复杂首先查找session的persistent Context中是否有缓存,如果有则直接返回 如果没

hibernate sql查询对象到map中

转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/26059615 插入排序:它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 一.插入排序算法 /*************************************************************** *版权所有 (C)2014,公司名称. * *文件名称:插入排序法 *内容摘要:无 *其它说明:无 *当前版

Hibernate HQL查询:

Hibernate HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装.完整的HQL语句形势如下:Select/update/delete…… from …… where …

转: Hibernate HQL查询 插入 更新(update)实例

1.实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql=”from User user ”;List list=session.CreateQuery(hql).list();上面的代码执行结果是,查询出User实体对象所对应的所有数据,而且将数据封装成User实体对象,并且放入List中返回.这里需要注意的是,Hibernate的实体查询存在着对继承关系的判定,比如我们前面讨论映射实体继承关系中的Employee实体对象,它有两个子类分别是 Hour

Hibernate HQL查询 插入 更新(update)实例

1.实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql=”from User user ”;List list=session.CreateQuery(hql).list();上面的代码执行结果是,查询出User实体对象所对应的所有数据,而且将数据封装成User实体对象,并且放入List中返回.这里需要注意的是,Hibernate的实体查询存在着对继承关系的判定,比如我们前面讨论映射实体继承关系中的Employee实体对象,它有两个子类分别是 Hour

第六讲(二) Hibernate HQL查询

HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖 Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装.完整的HQL语句形势如下:Select/update/delete…… from …… where …… group b