首页 > 代码库 > Hibernat的get()和load()方法的区别

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

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>

 

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