hibernate中get,load,list,iterate的用法及比较

本文详细介绍了Hibernate中get与load、list与iterate四种查询方法的区别及应用场景。get与load用于单个对象查询,区别在于缓存处理及延迟加载支持;list与iterate则适用于批量查询,iterate通过缓存优化性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,get和load都是查询单个对象,而list和iterate为批量查询

注意以下写法仅针对hibernate3的语法。

使用案例如下:

 1 // 1. get和load 的用法
 2 Person p = session.get(Person.Class,1);
 3 Person p = session.load(Person.Class,1);
 4 
 5 // 2.list和iterate的用法
 6 List<Person> persons = session.CreateQuery(" from Person ").list();
 7 for(Person person:persons) {
 8     System.out.println(person.getName());
 9 }
10 
11 Iterator<Person> persons = sesson.CreateQuery(" from Person ").iterate();
12 while(persons.hasNext()) {
13     Person p = persons.next();
14    System.out.println(p.getName());
15 }

 

load和get的区别:

load和get都是用于获取对象的数据,但是在使用中还是存在一些差别。

1. get在使用中,会查询一级缓存,但是如果没有命中,则提交sql语句到数据库重新查询。

2. load在使用中,会优先查询一级缓存,如果没有命中,则会查询二级缓存,如果仍然没有命中,才回提交sql到数据库中执行查询。

3. load支持延迟加载的功能,但是get不行。

4. 如果get未查询到结果,则会返回null值。 如果load未查询到结果,则会抛出异常信息ObjectNotFoundException。

在hibernate中,通常session层次的为一级缓存,sessionFactory层次的为二级缓存,其中二级缓存需要额外开启。

 

list和iterate的区别:

1. list是直接根据SQL提交到数据库查询,并获取所有的对象。

    当再次查询时,然后是根据SQL提交到数据库中查询,并获取所有对象。

2. iterate分两步,第一步是根据SQL提交到数据库查询到所有对象的主键值,并保存到session缓存中去。

   然后根据主键查询获取到所有的对象保存到sesson中。

  当再次查询时,直接根据主键值查询缓存中的对象,如果存在的话,不再提交到数据库中重新查询了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值