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

首先,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中。

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

原文地址:https://www.cnblogs.com/30go/p/5602982.html