场景 - 用户输入(日期范围,报告类型)取自JSP页面&传递给servlet然后传递给java。
我想问一下我是否应该 -
主要关注的是哪种方法在性能,稳健性和未来变化方面更好?
答案 0 :(得分:0)
那么你的问题是如此笼统。您的方法和业务模式是什么?如果你的查询有如此多的复杂性,似乎最好直接在jasper中使用sql,它比使用jasper中的值生成报告更快。但是在编程范例中,只有一个模块可以了解数据库连接,这是程序的域边。我更喜欢不在jasper配置中初始化数据库连接,所以只需使用jasper中的值并使用Hashmap映射它们。您可以在程序中使用先前的连接和数据库模块(用于实体或域对象的模块)并获取所需数据并将其映射到报告
答案 1 :(得分:0)
在java&中使用mysql查询然后使用Hashmap将值放在jasper中?
这听起来很疯狂,纯Hashmap
不是数据源,因此您无法对其进行迭代。
您的解决方案可以是:
在java&中使用mysql查询然后将值放在JRDatasource中,将数据源传递给jasper report
在jasper本身使用mysql查询&只使用java提供数据连接
- 醇>
在java中生成mysql查询并将查询和数据连接传递给jasper报告
我将使用的唯一方案是,无法从单个查询中以简单的方式提取数据,所有数据在查询中都不可用,或者数据已在内存中可用(例如用户已选择)表中的行。)
开发报告时,这是正常的"并且可能是最快的,像iReport这样的工具,使您可以自动从查询中提取字段并使用实时数据连接预览报表(您无需编译和运行代码)。这样,报表的开发人员也独立,在大型项目中非常有用。
当查询到达复杂的位置(取决于多个变量)时,查询可以直接作为参数(或多个参数)传递。在报告中,可以使用查询的默认表达式来获得2的优势。
通常你使用 metod 2。
性能:如果数据已经在内存1中更快(没有sql),否则你可能只会占用更多内存(因此当你加载JRDataSource时)。但是我没有做过任何广泛的测试。
健壮性,更多地取决于您的代码然后使用的方法
未来的变化,2具有只在一个地方进行更改的优势"报告",您甚至不需要打开java项目。
答案 2 :(得分:0)
如果我的理解是正确的,应用程序会为用户选择报告过滤器。这些过滤条件在HTTP Servlet Request中传递给应用程序,您想在
之间进行选择我建议与项目的整体后端设计策略保持一致,以便从数据库中获取数据。
如果您的报告相对简单且应用程序已经具有完全成熟的ORM实现,请使用第二种方法。这在初始实现以及任何未来的变更请求的实现方面都相对简单。
如果不是这种情况,并且用于生成报告的SQL查询是动态且相当复杂的,我仍然建议继续使用选项2.
只要应用程序在具有不错规格的应用服务器上运行,这两种方法都可能没有任何显着的性能差异。 如果性能至关重要且当前的服务器资源有限,我建议 - 在单独的JVM中将报告作为单独的应用程序运行 - 单独的报告和应用程序数据库服务器并使用数据库复制工具 同步数据。生成庞大的复杂报告往往会变慢 很好地降低了应用程序的性能。