Hibernate part 13:批量检索策略

本文介绍Hibernate框架中批量加载策略的应用,特别是如何通过设置batch-size属性来优化Customer与Order之间的关联查询,减少数据库交互次数,提高应用程序性能。

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

 

 

 从Customer到Order,配置在<set>标签中,batch-size表示一次查询几个客户的订单,而不查询的订单数量,配置为2,表示一次查询两个客户的订单数量

<hibernate-mapping>
	<class name="rock.lee.bean.Customer" table="customer" catalog="test" >
		<id name="id" column="id" type="int">
			<generator class="native"></generator>
		</id>
		<set name="orders" cascade="save-update,delete,delete-orphan" inverse="true"  fetch="select" lazy="true"  batch-size="2">
			<!-- customer表order是中所生成的外键列 -->
			<key column="customer_id"></key>
			<one-to-many class="rock.lee.bean.Order" />
		</set>
		<property name="name" column="name" type="java.lang.String"></property>
		<property name="city" column="city" type="java.lang.String"></property>
	</class>
</hibernate-mapping>

 查询所有的Customer并且获得Order集合的大小

	@Test
	public void test05() {
		Session session = HibernateUtils.openSession();
		Transaction transaction = session.beginTransaction();
		
		List<Customer> list = session.createQuery(" from Customer").list();
		for (Customer c : list) {
			System.out.println(c.getOrders().size());
		}
		
		transaction.commit();
		session.close();
	}

 SQL:

Hibernate: 
    select
        customer0_.id as id0_,
        customer0_.name as name0_,
        customer0_.city as city0_ 
    from
        test.customer customer0_
Hibernate: 
    select
        orders0_.customer_id as customer4_0_1_,
        orders0_.id as id1_,
        orders0_.id as id1_0_,
        orders0_.address as address1_0_,
        orders0_.money as money1_0_,
        orders0_.customer_id as customer4_1_0_ 
    from
        test.orders orders0_ 
    where
        orders0_.customer_id in (
            ?, ?
        )

 通过in条件查询order

 

从Orders到Customer配置在Customer.hbm.xml中的<class>标签中batch-size,一次查询几个客户

<hibernate-mapping>
      <class name="rock.lee.bean.Customer" table="customer" catalog="test" batch-size="2">
</hibernate-mapping>

 

检索策略的比较

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值