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

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

  • 相关阅读:
    音视频解码流程
    线程及视频解码过程6-16
    如何快速重置OUTLOOK2013,2016到初始配置状态,outlook 修改数据文件位置
    MERGE函数使用
    ExecuteSql、ExecuteSqlReader的区别
    MySQL中char与varchar区别,varchar最大长度是多少?
    如何删除本地项目文件中的.svn文件
    ETL-Kettle学习笔记(入门,简介,简单操作)
    npm run build 报错 semversemver.js:313 throw new TypeError('Invalid Version: ' + version)
    React Editor
  • 原文地址:https://www.cnblogs.com/30go/p/5602982.html
Copyright © 2020-2023  润新知