Hibernat的get()和load()方法的区别

get()方法是立即查询

load()方法是延迟查询,Person person = (Person)session.load(Person.class,1);这句话其实没有去查找数据库,只是返回了一个代理。当真正需要的时候才去查找数据库比如输出System.out.println(p.getName());这个时候才发出查找数据库,所以load()方法是延迟查询。如果输出的 是ID也不会发出查询语句,因为Person person = (Person)session.load(Person.class,1)这句话已经指定是那条数据了。好处是:对象很大的时候可以用load,当数据很小的时候不适应用load方法。当load()方法查询的id不存在的时候会报ObjectNotFoundException异常。get方法查询的id不存在不会报错返回null.

也可以在映射文件中配置使用lazy 让load方法变成立即查询。

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<!-- 本文件就是一个java对象到关系数据库的映射配置文件 -->

-<hibernate-mapping package="bean">

<!-- class 配置 类 对应表的映射配置 name 表示类名 table 表示关系数据库中的表名 -->

-<class table="t_person" name="Person" lazy = "false">

<!-- id 指定Person类中那个属性是Id -->

-<id name="id">

<!-- id生成策略 -->

<generator class="native"/>

</id>

<!-- Person类的其他属性配置 name 对应 类的属性 column 对应表的字段名(如果没有设置column将使用name的值创建对应的列名) -->

<property name="name" column="t_name"/>

<property name="password" column="t_pass"/>

<!-- type 表示指定属性 对应的hibernate类型 date 2013-02-17 time 17:02:28 timestamp 2013-02-17 17:03:07 默认 -->

<property name="birthday" type="timestamp"/>

</class>

</hibernate-mapping>
时间: 2024-10-13 07:08:57

Hibernat的get()和load()方法的区别的相关文章

Hibernate中get方法和load方法的区别

1.从返回结果上对比: load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常: get方法检索不到的话会返回null: 2.从检索执行机制上对比: load方法的执行则比较复杂首先查找session的persistent Context(一级缓存)中是否有缓存,如果有则直接返回,如果没有则去查找二级缓存,如果有则返回,如果没有则判断是否是lazy,若不是lazy,直接访问数据库检索,查到记录返回(并且同时在二级缓存中存放查到的数据方便下次使

hibernate中懒加载和急加载的区别,以及hibernate中get()方法和load()方法的区别

* 懒加载在加载一个实体的时候,不会马上从数据库中加载,即从数据库中加载到内存.而急加载在加载一个实体时,会立即从数据库中查询,与其关联的类也会被同时查询. 急加载就会很快,因为在第一次加载的时候,已经帮我们全部加载好了.而懒加载则会相对慢一些,因为在我门需要查询的时候,它才会执行sql操作. 所以懒加载的优点是占用内存小,执行速度慢;急加载是执行速度快,占用内存高 hibernate的get()he load()方法在执行的时候又很大的区别, 执行get()方法会把所有的基本数据全部加载, 而

Hibernate 中get()与load()方法的区别

一.get和load方法都是根据id去获得对应数据的,但是获得机制不同:如果使用get方法,hibernate会去确认该id对应的数据是否存在,它首先会去session中去查询(session缓存其实就hibernate的一级缓存),如果没有,再去二级缓存中去查询,如果再没有,就去数据库中查询,仍然没有找到的话,就返回null 而使用load方法的话,hibernate会认定该id对应的数据一定存在,它也会先去session缓存中去查找,如果没有找到,hibernate会根据lazy属性值来确定

Hibernate框架之get和load方法的区别

我们在学习Hibernate框架时,经常会进行修改,删除操作,对于这些操作,我们都应该先加载对象,然后在执行或删除的操作,那么这里Hibernate提供了两种方法按照主键加载对象,也就是我要说的get和load这两个方法. 我们都知道这两个方法都能够去加载对象,但是他们之间的区别我们必须要去了解一下,这可能也会成为面试的重点.下面我们 主要分析一下get和load这两个方法的区别: 一.Load加载方式和get加载对象方式的区别: 1.load加载方式: Hibernate在使用Load方法获取

hibernate架构之session中get与load方法的区别

hibernate是一个用于连接数据库的升级版JDBC,与一般JDBC不同的是,hibernate架构是通过hql进行查找,通过session建立连接.其工作原理是:将实例分为瞬时状态.持久状态.游离状态,通过hql对持久状态的实例进行CRUD.在学习的过程中我们遇到了这样的一个现象:用Session对象调用get()方法和load()方法获取对象时,类似的代码会分为两种结果,get方法运行成功,load方法会报错,代码示例如下: get()方法源代码: Session session= Hib

Hibernate中get()和load()方法的区别

在hibernate中我们知道如果要从数据库中得到一个对象,通常有两种方式,一种是通过session.get()方法,另一种就是通过session.load()方法,然后其实这两种方法在获得一个实体对象时是有区别的,在查询性能上两者是不同的. 一.load加载方式 当使用load方法来得到一个对象时,此时hibernate会使用延迟加载的机制来加载这个对象,即:当我们使用session.load()方法来加载一个对象时,此时并不会发出SQL语句,当前得到的这个对象其实是一个代理对象,这个代理对象

get方法和load方法的区别

get方法的特点 get方法采用的是立即检索策略(查询):执行到这行的时候,马上发送SQL查询 get方法查询后返回的是真实对象的本身 load方法的特点 load方法采用的是延迟加载(懒加载lazy:什么时候使用,才会去加载)的策略:执行到这行的时候,不会发送 SQL语句,什么时候使用这个对象,才会发  送SQL语句. load查询后返回的是代理对象 原文地址:https://www.cnblogs.com/coder-wf/p/12221247.html

Hibernate的load和get方法的区别

这次我们聊一下Hibernate3.2 Session加载数据时get和load方法的区别,我总结的如下: 1. 对于get方法,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查询数据库数据库中没有就返回null.这个相对比较简单,也没有太大的争议.主要要说明的一点就是在这个版本中get方法也会查找二级缓存! 2.  load方法加载实体对象的时候,根据映射文件上类级别的lazy属性的配置(默认为true),分情况讨论: (1

datagrid中load,reload,loadData方法的区别

它有其中有load,reload,loadData这三个方法,它们都有相同的功能,都是加载数据的,但又有区别. load方法,比如我已经定义一个datagrid的id为grid,那这个方法的使用方式为 $(“#grid”).datagrid(“load”,{ }); 它的参数为一个json对象,里面写的是你要传输的参数的键值对,调用这个方法来加载数据的时候,它传给后台的分页信息是从第一页开始的. reload方法,使用方式也跟load的一样 $(“#grid”).datagrid(“reload