Hibernate优化---抓取策略

本文介绍了Hibernate的延迟加载、抓取策略和批量抓取。延迟加载包括类的延迟加载和关联级别的延迟加载,通过配置lazy属性控制。抓取策略涉及set和many - to - one上的fetch和lazy,fetch控制SQL语句格式。批量抓取可在set中设置batch - size,减少查询次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.延迟加载

   类的延迟加载

       在类的映射文件中的class标签上配置lazy属性:默认为true,当你配置为false的时候,就算你使用session.load他也会在你调用这个方法之后发送SQL语句,而不是在你使用查询得到的对象的时候才发送SQL语句

   关联级别的延迟加载

       在类的映射文件中的set和many-to-one上配置lazy属性:默认为true,也就是说,当你查询某个对象是,他不会连带着查询他的关联对象,当你使用这些关联对象的时候才会发送SQL语句查询

2.抓取策略

   set上的fetch和lazy

        fetch是用于控制sql语句格式的:取值---join,select(默认值),subselect,当使用join的时候lazy失效,以为查询对象的时候他第一条sql语句是select A join B on.....所以会一次性将关联对象也查出来。当取值为subselect时,查询多个对象及其关联对象时,发送的是一条嵌套查询的sql语句。select为默认值,情况和关联级别的延迟加载类似,不过多了一个取值extra,及其懒惰,当你选取这个值的时候,输出关联类的某个属性,他只会单独查询这个属性,而不是所以属性都差出来

   many-to-one上的fetch和lazy

       作用和set中的一样,只是fetch取值只有select和join,用法也一样,lazy取值为proxy,false,no-proxy(基本上不用),取值为proxy时,是否延迟加载取决于与之对应的类中的class上的lazy,例如:客户与联系人之间存在一对多关系,联系人映射文件中的many-to-one上的lazy为proxy,查询联系人时是否延迟加载客户,就取决去客户映射文件中class上的lazy

3.批量抓取

在set中设置batch-size="查询数量",当你查出客户列表,遍历客户get其联系人的时候会一次性查询多个客户的联系人,而不是每个客户的联系人都查询一次

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值