我们试图从数据库中迭代大量的行并将它们转换为对象。行为如下:
更新1 :
更新2
感谢并希望听到您对此的见解。
答案 0 :(得分:1)
我们需要尽可能少地调用DB(1次调用将是理想的情况),同时还要阻止应用程序使用太多内存。对于这类问题,还有其他解决方案可能是纯JDBC还是其他任何技术?
你真的不应该担心数据库调用量。只需查询最终用户需要立即查看的数据。它不能更有效地完成。谷歌也不会查询整个数据库只显示前10个。不,它只查询那10个显示,没有更少或更多。这比将整个数据库拖入/复制到应用程序的内存并进行处理更加快速和高效。利用RDBMS的强大功能。这就是它的发明之处。
答案 1 :(得分:0)
您似乎需要某种分页。 iBatis通过查询中的标准LIMIT / OFFSET参数(以及iBatis 3中的RowBounds)来实现这一点。
但似乎(如果我说得对)你也正在使用iBatis的GROUP BY功能,因此选择返回带有N1 distint“idx”字段的N条记录会导致创建N1个“父”对象一个有几个子对象(总共创建了N个子对象)。或类似的东西。
不幸(并且可以理解)这两件事do not mix well。
我不会在这里看到任何银弹,人们可以想到许多方法,每种方法都有其缺点 - 如果没有更多信息,很难评估。
如果主要对象是“大”(许多记录)并且每个对象将被单独处理(跳转到远程服务器),您甚至可能想要进行临时分页,每页有一个对象,记住内部优先读取ID(类似SELECT ... FROM ... WHERE id = (SELECT MIN(id) FROM .... WHERE id > #lastid#
))