Hibernate加载策略

Hibernate加载策略

即时加载

使用==session.get()==获取数据,会立即查询对象,范围从一级缓存-二级缓存-数据库,我们将这种查询方式称为即时加载。

延迟加载

延迟加载也叫懒加载,比如==session.load()==获取数据,不会立即查询对象,而是在使用到该对象时,才会去查询,范围从一级缓存-二级缓存-数据库,我们将这种查询方式称为懒加载。

class的lazy

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.hibernate.pojo">
<!--
    lazy懒加载配置,默认值true支持懒加载
    false不支持懒加载,这个配置会影响get/load方法
-->
<class name="Book" lazy="true">
</class>
</hibernate-mapping>

class指的是实体类配置文件中的 class 标签上的 lazy 属性,该属性会影响 session.load() 是否以懒加载的方式获取对象。
该属性有两个值 true 和 false ,作用分别如下:

  • true,默认值,支持懒加载;
  • false,不支持懒加载

集合的lazy

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.hibernate.pojo">
	<class name="Category">
    <!--
        lazy控制一端对应多端的数据是否懒加载
        默认值true,懒加载(不查询多端数据),但是如果查询size,还是会查询所有元素
        false不支持懒加载,查询一端时将多端数据也一起查询
        extra懒加载(不查询多端数据),比较智能,如果查询的是size,会使用count语句
    -->
        <set name="books" lazy="extra">
            <key column="category_id"></key>
            <one-to-many class="Book"/>
        </set>
	</class>
</hibernate-mapping>

集合指的是实体类配置文件中的 set 、 list 、 map 标签上的 lazy 属性,该属性控制一端对应多端的数据
是否以懒加载的方式获取。
该属性有三个值 true 、 false 和 extra ,作用分别如下:

  • true,默认值,懒加载(不查询多端数据),但是如果查询集合size(),还是会查询所有元素
  • false,不支持懒加载,查询一端时将多端数据也一起查询
  • extra,懒加载(不查询多端数据),比较智能,如果查询的是集合size(),会使用count语句

关联关系的lazy

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.hibernate.pojo">
    <class name="Book">
        <!--
        lazy控制某一端关联的另一端的数据是否懒加载
        默认值proxy,懒加载(不查询关联的另一端)
        false不支持懒加载,查询某一端时将关联的另一端一起查询
        -->
    	<many-to-one lazy="proxy" name="category" class="Category" 			column="category_id"cascade="save-update"></many-to-one>
    </class>
</hibernate-mapping>

关联关系指的是实体类配置文件中的 many-to-oneone-to-manymany-to-many标签上的 lazy 属性,该属性控制某一端关联的另一端的数据是否以懒加载的方式获取。
该属性主要用到 proxy 和 false ,作用分别如下:

  • proxy,默认值,懒加载(不查询关联的另一端)
  • false,不支持懒加载,查询某一端时将关联的另一端一起查询
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值