场景-用户输入(日期范围、报表类型)从JSP页面获取并传递到servlet,然后传递到java。
我想问我是否应该-
主要关注的是哪种方法在性能、健壮性、未来变化方面更好?
发布于 2015-11-09 08:43:53
你的问题太笼统了。你的方法和商业模式是什么?如果您的查询如此复杂,那么在jasper中直接使用sql似乎更好,而且它将比使用jasper中的值生成报告更快。但是在编程范例中,只有一个模块需要了解数据库连接,那就是程序的域部分。我希望不要在jasper配置中初始化数据库连接,所以只需在jasper中使用值并使用Hashmap映射它们。您可以在程序中使用以前的连接和数据库模块(用于实体或域对象的模块),并获取所需数据并将它们映射到报表中。
发布于 2015-11-09 12:31:37
在java中使用mysql查询&然后使用Hashmap将值放入jasper中?
这听起来很疯狂,纯Hashmap并不是数据源,因此您将无法在其上进行迭代。
你的解决办法可以是:
所以通常使用metod 2.
性能:如果数据已经在内存1中更快(没有sql),那么您可能只会包含更多的内存(因此,当您加载一个JRDataSource时)。然而,我没有做任何广泛的测试。
健壮性,更多地取决于您的代码,而不是使用的方法。
将来的更改,2的优点是只在一个地方更改“报表”,您甚至不需要打开java项目。
发布于 2015-11-10 09:07:08
如果我的理解是正确的,应用程序已经为报告选择了用户筛选器。这些筛选条件在HTTP请求中传递给应用程序,您希望在
我建议与项目的总体后端设计策略保持一致,以便从DB获取数据。
如果您的报告相对简单,并且应用程序已经有了成熟的ORM实现,那么可以使用第二种方法。在最初的实现以及未来任何变更请求的实现中,这将是相对简单的。
如果不是这种情况,并且生成报告的sql查询是动态的和相当复杂的,我仍然建议继续使用选项2。
只要应用程序运行在具有良好规格的应用服务器上,这两种方法都可能没有任何显著的性能差异。如果性能是关键的,并且当前资源有限,我建议在单独的JVM中以单独的应用程序运行报表--单独的报表和app db服务器,并使用DB复制工具对它们之间的数据进行同步。生成庞大的复杂报告往往会大大降低应用程序的性能。
https://stackoverflow.com/questions/33604778
复制相似问题