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中。

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

 

posted @ 2016-06-21 11:09  硅谷工具人  阅读(604)  评论(0)    收藏  举报
成功之道,在于每个人生阶段都要有不同的目标,并且通过努力实现自己的目标,毕竟人生不过百年! 所有奋斗的意义在于为个人目标实现和提升家庭幸福,同时能推进社会进步和国家目标! 正如古人讲的正心诚意格物致知,修身齐家治国平天下。