我有一个列表,它是一个如下所示的java对象。
public class TaxIdentifier {
public String id;
public String gender;
public String childId;
public String grade,
public String isProcessed;
////...///
getters and setters
///....///
}
Records in DB looks like below,
id gender childId grader isProcessed
11 M 111 3 Y
12 M 121 4 Y
11 M 131 2 Y
13 M 141 5 Y
14 M 151 1 Y
15 M 161 6 Y
List<TaxIdentifier> taxIdentifierList = new ArrayList<TaxIdentifier>();
for (TaxIdentifier taxIdentifier : taxIdentifierList) {
}
当我处理循环并获得id = 11时,我必须检查是否有id = 11的其他记录并一起处理它们并执行DB操作,然后在这种情况下取下一条记录说12并查看如果还有其他ID为12的记录,依此类推。
一个选择是我获取ID并查询数据库以返回所有ID = 11,依此类推。 但这与数据库之间来回太多。
在Java中执行相同操作的最佳方法是什么?请指教。
答案 0 :(得分:1)
如果您仍然需要处理相应数据库表中的所有记录,则应在一次数据库往返中检索所有记录。
此后,您可以收集字典数据结构中的所有TaxIdentifier
记录,并以所需的任何方式进行处理。
简短示例如下:
Map<String, List<TaxIdentifier>> result = repositoty.findAll().stream().collect(Collectors.groupingBy(TaxIdentifier::getId));
这里所有TaxIdentifier
记录都按TaxIdentifier的ID分组(所有ID等于“ 11”的记录)可以通过以下方式检索和处理:
List<TaxIdentifier> taxIdentifiersWithId11 = result.get("11");
答案 1 :(得分:0)
我会利用您的数据库的功能。查询时,应按ID升序对查询进行排序。不知道您正在使用哪个数据库,但我会这样做:
SELECT * FROM MY_DATABASE WHERE IS_PROCESSED = 'N' ORDER BY ID ASC;
这需要将其从应用程序分类到数据库上的负担。然后,您的查询将返回ID最低的未处理记录。然后按顺序依次处理它们。