【发布时间】:2017-02-03 14:25:40
【问题描述】:
我的数据库中的每一行都是这样的
School Class StudentID Name Age
123 8 811 John 10
123 8 812 Smith 11
123 8 821 John 12
123 8 822 Smith 13
123 9 911 John 14
123 9 912 Smith 15
456 8 811 John 10
456 8 812 Smith 11
现在我想像这样返回上面的数据
Map<String,Map<String,List<Object>>>
ie. Map<School,Map<Class,List<StudentID>>>
我正在使用 Spring 的 JdbcTemplate 和 RowMapper,但我能得到的只是所有行的列表。因为我无法在我的 RowMapper 中维护我的主地图(我可以在 RowMapper 类中有一个静态地图吗??但我不希望它是静态的,因为这是一个网络服务,后续调用可能会搞砸。 ),我只能选择获取此行列表,然后使用我的逻辑创建我想要的集合。
我开始了解ResultSetExtractor,但我找不到如何使用它来完成这项工作。
请让我知道是否有任何方法可以使用行映射器或某种方式完成此操作。或者我解决这个问题的唯一方法是我必须再次迭代列表并得到我想要的。
编辑: 我的查询是这样的选择查询:
SELECT * from TABLENAME
实际上从 Java 中检索 ResultSet 需要 40 分钟。
由于 DB 调用用于填充缓存对象,它每 4 小时使用 CRON 完成一次,我不介意 40 分钟的时间延迟,因为实际的 REST 调用将引用缓存对象。但我仍然想尽可能高效地做到这一点。
如果还有其他方法可以处理这种情况,请告诉我。每个 REST 调用的正常 jdbc 调用代价高昂,因为我们每秒会收到 100 个请求。
【问题讨论】:
-
我假设您的每个实体都有一个
DAO类?为什么不让你的 DAO 将List转换为Map并将其返回给外界? -
jdbcTemplate 调用在 DAO 内部,我想知道这是否可以使用 RowMapper 完成。
-
所以您基本上希望
JdbcTemplate在您使用它执行查询时为您形成Map?我相信您实施的任何解决方案最终都会在内部将List转换为Map,那么为什么不让您的DAO去做呢? -
是的,这正是我想要的。但是有没有办法做到这一点,或者我应该从从 jdbcTemplate 获得的列表中自己做到这一点
-
我想应该有办法做到这一点。但问题是你这样做的动机是什么?
标签: java spring spring-jdbc