gpt4 book ai didi

java - 可以延迟批量加载实例字段,同时保持紧密耦合吗?

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:31 24 4
gpt4 key购买 nike

假设我有以下类(class):

public class Foo {
public Bar bar;
}

一个巨大的 iBATIS 查询会加载许多 Foo 实例,并填充数据库中的所有 bar 字段。我想将巨大的查询分成两个:

  • 一个查询可加载多个 Foo 实例,并将 bar 字段保留为空。
  • 另一个查询,用于加载某些关联 Foo 实例的所有 bar 字段。

这个想法是首先执行第一个查询,然后仅在稍后需要时才执行第二个查询。

诀窍在于关联。我可以批量加载 bar 字段,但是将该数据注入(inject)回关联的 Foo 的最佳方法是什么?有没有办法让每个延迟加载的实例字段执行一个查询?这似乎会抵消 iBATIS 的性能优势。

最佳答案

虽然从数据库加载对象图很诱人,但我们通常会尽量避免这样做,因为这意味着每个成员一次查询,并且在获取大型集合时,可能会导致对数据库进行很多很多查询并导致响应时间较长。

因此我们通常采用成员分离的方式建模。假设您有一个有用户的商店。您没有将用户建模为商店中的列表,而是进行了读取“List getUsersForShop(shop)”的 DAO 调用。

我们的一些页面甚至更进一步。对于分页网页,从数据库获取所有对象是没有用的,因为它们不会同时显示。所以我们进一步拆分:

列出 getUserIdsForShop(shop)

然后对于页面上的每一行,我们执行“User getUserForId(long id)”。

这将导致服务器、数据库和客户端之间的数据流最小化,并将减少每页的调用次数。如果您的搜索结果是 10.000 个用户,但每页只显示 10 个用户,那么您刚刚保存了 99990 个用户的提取,并将它们保存在内存中。

不要用它作为锤子来钉所有的钉子。这只是大型对象图需要考虑的一个选项。

关于java - 可以延迟批量加载实例字段,同时保持紧密耦合吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6232571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com