第一种:立即查询
根据id查询,调用get方法,一调用get方法马上发送语句查询数据库
我们打个断点测试一下
第二种:延迟查询(类级别)
根据id查询,还有load方法,调用load方法不会马上发送语句查询数据,只有得到对象里面的值时候才会发送语句查询数据库
同样的打个断点测试一下
可以看出这个延迟加载只有查询非id值的时候才会发送sql语句
不过这里会有一个小bug,需要提前解决一下,就是idea和eclipse不同的debug方式,要手动关掉一个设置才能测试到这个load方法的延迟效果
延迟查询的另一种:关联级别延迟
就像我们公司和员工是有关联的,这个时候查询公司的同时查询员工这个过程要不要延迟就叫做关联级别的延迟,而在hibernate中是默认启动这个种延迟效果的
首先get方法发送了语句
调用set集合时不发送语句
这个idea要想测试这个效果,也得去把另一个选项勾掉才能实现
我们可以通过修改配置文件的属性来修改关联延迟的类型
1 在映射文件中进行配置实现
(1)根据客户得到所有的联系人,在客户映射文件中配置
2 在set标签上使用属性
(1)fetch:值select(默认)
(2)lazy:值
true:延迟(默认)
false:不延迟
extra:极其延迟
不延迟(这个效率很低,不推荐使用)
极其延迟(效率很高)
hibernate的批量抓取
1 查询所有的公司,返回list集合,遍历list集合,得到每个公司,得到每个公司的所有员工
(1)上面操作代码,发送多条sql语句
很多语句
2 在客户的映射文件中,set标签配置
(1)batch-size值,值越大发送语句越少
数值太小,没什么效果
把数值改大
发现值少了很多,这样效率就高了
好了,hibernate的基础部分就复习到这里了,等以后再回来深入理解,或许要淘汰了不一定哈哈哈