准备测试数据(三条)
1、get()方法直接返回实体类,如果查不到数据则返回null。load()会
返回一个实体代理对象(当前这个对象可以自动转化为实体对象),
但当代理对象被调用时,如果没有数据不存在,就会抛出个
org.hibernate.ObjectNotFoundException异常
load得到的代理对象还没有使用,所以还没有被实例化,因此没有报错
一旦使用,则抛出org.hibernate.ObjectNotFoundException异常
2.load先到缓存(session缓存/二级缓存)中去查,如果没有则返回一个
代理对象(不马上到DB中去找),等后面使用这个代理对象操作的时
候,才到DB中查询,这就是我们常说的load在默认情况下支持延迟加
载(lazy)
load方法同样可以使用以下检验get方式检测
3. get先到缓存(session缓存/二级缓存)中去查,如果没有就到DB中去
查(即马上发出sql)。总之,如果你确定DB中有这个对象就用
load(),不确定就用get()(这样效率高)
Employee e=(Employee) ss.get(Employee.class,3);
Employee ee=(Employee) ss.get(Employee.class,3);
两次查询,第一次将生成Hql语句,而第二次get将从hibernate缓存中进行查找
<img src="https://img-blog.csdn.net/20160520214104382?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" style="font-size:14px;" alt="" />
若两次get都是查询不存在的对象
Employee e=(Employee) ss.get(Employee.class,4);
Employee ee=(Employee) ss.get(Employee.class,4);