gpt4 book ai didi

java - iBatis - 标题细节问题

转载 作者:行者123 更新时间:2023-11-29 09:25:46 27 4
gpt4 key购买 nike

我正在尝试将一些新功能添加到使用 iBatis 的现有应用程序中,但我对其中一个设计决策有些犹豫。

有一个现有的类(称之为 A 类),我想向其添加一些新字段。这些字段将是 B 类型。

查询将通过外部连接连接 B。

所以它会是这样的

public class A {

//... existing fields
private List<B> bList; // may use a Map rather than a list?

// etc.
}

public class B {
private int id; // primary key
private int type;
private String description;

// etc.

我在网络应用程序中使用它。在第一页上,我想返回“A”列表,然后在旁边放置 B 的链接。

例如:

LinktoRecordA1 - LinktoB1 LinktoB2 LinktoB3
LinktoRecordA2 - LinktoB1 LinktoB3
LinktoRecordA3 - LinktoB1 LinktoB2 LinktoB3
LinktoRecordA4

等等

(注意:记录 A4 没有指向任何 B 的链接 - 因此是上面提到的外部连接)

在“A”的初始提取中,我只想知道 B 记录是否存在,它的主键是显示 B 详细记录的链接。所以我的问题是,如果不在“A”对象上创建一个完全填充的“B”列表,我该如何做到这一点?

最佳答案

关于您的评论:

How else should I do it? I think what I'm having trouble understading is 
this- should I return a list of "A" objects with only minimal data
populated, or would should I create some kind of new object?

在您描述的情况下(当返回列表并且用户可以从中选择内容时),我注意到用户通常选择一两个记录以查看更多详细信息。在这种情况下,您最终会白白返回一个完全填充的对象列表。

在那种情况下,我所做的是回退到只选择对象标识符而不是完整的对象。

所以你可以创建一个只有这些数据的新类:

public class C {
private Integer idForA;
private List<Integer> listOfIdsForB = new ArrayList<Integer>();
//...
}

然后您使用外连接编写查询以返回 A 和 B 的标识符并返回类似于此的结果:

IDtoRecordA1 | IDtoB1 
IDtoRecordA1 | IDtoB2
IDtoRecordA1 | IDtoB3

IDtoRecordA2 | IDtoB1
IDtoRecordA2 | IDtoB3
IDtoRecordA3 | IDtoB1

IDtoRecordA3 | IDtoB2
IDtoRecordA3 | IDtoB3

IDtoRecordA4 | null

在这个阶段,resultMap 标签的 groupBy 属性会派上用场,可以将结果转换为包含以下内容的 C 对象列表:

C1: IDtoRecordA1, [IDtoB1, IDtoB2, IDtoB3]
C2: IDtoRecordA2, [IDtoB1, IDtoB3]
C3: IDtoRecordA3, [IDtoB1, IDtoB2, IDtoB3]
C4: IDtoRecordA4, []

这对于避免 N+1 查询也非常有用。当您返回带有 B 列表的 A 对象时,您可能已经这样做了,但是如果您使用单独的查询来检索列表(即 result 标记上的 select 属性),我建议您查看 iBatis Data Mapper 开发人员指南中的“避免 N+1 选择”部分,以最大程度地减少返回数据所需的查询数量。

底线是...

...如果您处理大量数据,那么返回完全加载的对象只是为了显示少量信息,这可能有点矫枉过正。

..另一方面,如果您处理少量数据,引入另一个处理 ID 的类可能会使事情复杂化,因此您最好返回 A 的完整对象和 B(当然要避免 N+1 查询)。

关于java - iBatis - 标题细节问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2061004/

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