hibernate中get,load,list,iterate的用法及比较
首先,get和load都是查询单个对象,而list和iterate为批量查询
注意以下写法仅针对hibernate3的语法。
使用案例如下:
// 1. get和load 的用法
Person p = session.get(Person.Class,1);
Person p = session.load(Person.Class,1); // 2.list和iterate的用法
List<Person> persons = session.CreateQuery(" from Person ").list();
for(Person person:persons) {
System.out.println(person.getName());
} Iterator<Person> persons = sesson.CreateQuery(" from Person ").iterate();
while(persons.hasNext()) {
Person p = persons.next();
System.out.println(p.getName());
}
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中。
当再次查询时,直接根据主键值查询缓存中的对象,如果存在的话,不再提交到数据库中重新查询了。
hibernate中get,load,list,iterate的用法及比较的更多相关文章
- JavaWeb_(Hibernate框架)Hibernate中数据查询语句SQL基本用法
本文展示三种在Hibernate中使用SQL语句进行数据查询基本用法 1.基本查询 2.条件查询 3.分页查询 package com.Gary.dao; import java.util.List; ...
- hibernate 中createQuery与createSQLQuery两个用法
hibernate 中createQuery与createSQLQuery两者区别是:前者用的hql语句进行查询,后者可以用sql语句查询前者以hibernate生成的Bean为对象装入list返回后 ...
- 转:Hibernate中Criteria和DetachedCriteria的完整用法
原文地址:http://blog.sina.com.cn/s/blog_667528fd0100rkrf.html 设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装.现在对 H ...
- JavaWeb_(Hibernate框架)Hibernate中数据查询语句Criteria基本用法
Criteria进行数据查询与HQL和SQL的区别是Criteria完全是面向对象的方式在进行数据查询,将不再看到有sql语句的痕迹,使用Criteria 查询数据包括以下步骤: 1. 通过sessi ...
- JavaWeb_(Hibernate框架)Hibernate中数据查询语句HQL基本用法
HQL(Hibernate Query Language) 是面向对象的查询语言, 它和 SQL 查询语言有些相似. 在 Hibernate 提供的各种检索方式中, HQL 是使用最广的一种检索方式. ...
- Hibernate 中Hql 查询中间表的用法
案例简述: 项目中存在User 用户表 和 Role 角色表 它们之间是多对多的关系 在User类定义中 使用hibernate注解 //角色列表 @ManyToMany(targetEntity = ...
- Hibernate中Session的get和load
hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别.测试版本:hibernate 4.2.0. get Session接 ...
- hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别
hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别 转自http://www.blogjava.net/bnlovebn/archi ...
- Hibernate中Session之get和load方法的真正区别
最近在学习SHH框架中的hibernate,对Session的get和load方法,有点混不清楚,不知道区别在哪,或者对它们的区别感触不深.所以百度了一下,结果问题来了.百度的结果和实际测试的结果出入 ...
随机推荐
- Mac 配置 vim
Mac 配置 vim 安装 vim 7.4 cd ~ hg clone https://code.google.com/p/vim/ cd vim ./configure --with-feature ...
- Fluent interface
In software engineering, a fluent interface (as first coined by Eric Evans and Martin Fowler) is an ...
- django写的留言板
代码见 https://github.com/linux-wang/show-me-the-code/tree/master/dj_test 实际上是 https://github.com/linux ...
- java连接数据源-读取tomcat数据源配置
读取数据源配置,获取连接 1.配置数据源 D:\apache-tomcat-7.0.70\conf\context.xml <Resource name="jdbc/news" ...
- CloseHandle(IntPtr handle)抛异常
[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static ext ...
- Linux tcpdump 命令详解
简介用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的& ...
- Linux 中 17 个 tar 命令实用示例
Tar(Tape ARchive,磁带归档的缩写,LCTT 译注:最初设计用于将文件打包到磁带上,现在我们大都使用它来实现备份某个分区或者某些重要的目录)是类 Unix 系统中使用最广泛的命令,用于归 ...
- Struts学习总结-02 类型转换
一 类型转换 input.jsp <%@ page language="java" import="java.util.*" pageEncoding=& ...
- Git / 程序员需要知道的12个Git高级命令
众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git,首先当然是学习Git的基本工作流.相比于SVN等传统版本控制系统来说,Git是专为分布式版本控制而生的强 ...
- SVM基本思想和对偶推导笔记-记录毕业论文1
快毕业啦~~记得上一篇论文利用JointBoost+CRF做手绘草图的分割项目在3月份完结后,6月份去实习,9月份也没怎么认真找工作就立刻回来赶论文(由于分割项目与人合作难以写入毕业论文),从9月到1 ...