我正在使用 Spring/Hibernate 编写一个向用户显示报告的 Web 应用程序,我希望允许用户将结果导出到 CSV 文件。
谁能建议一种将 Hibernate 查询结果输出到 CSV 文件的有效方法?
谢谢!
Hibernate 用于对象关系映射。如果另一端没有对象,那有什么意义呢?
Spring 不禁止混合和匹配 JDBC 和 Hibernate。对手头的问题使用最佳方法。在您的情况下,直接 JDBC 听起来最好。
另外,如果这是一个 Web 应用程序,请查看 Spring 的 AbstractJExcelView。也许您可以编写一个直接的 DAO 来获取数据,将其发送回控制器,然后让它将 JExcelView 呈现回浏览器。用户将在浏览器中将数据视为 Excel 电子表格。他们可以选择从浏览器将其保存为 .csv 文件。干净整洁。
如果您使用的是 Hibernate,则查询的结果将是一个对象列表,我将遍历该列表并使用实用程序类将这些对象作为 csv 打印到 StringBuffer。
让 Hibernate 实例化一个(大?)对象列表及其依赖项,只是为了在实例化后立即将它们序列化为字符串数据,从时钟周期和 RAM 的角度来看,这当然不是很有效,但是从开发人员的角度来看可能是这样 -小时观点。如果您担心您的处理器和 RAM,我建议您运行一个普通的 JDBC SQL 查询并将其直接处理到 csv。
我想 Hibernate 在这里被用作更大应用程序的一部分,其中一部分是将某些内容导出到 CSV。在整个应用程序中使用 Hibernate 时,将 JDBC 用于这一块可能不合适。
如果我的假设不正确,那么 JDBC 是正确的选择,否则您可能需要遍历 Hibernate 的集合来构建您的 CSV。
有时在构建 CSV 时会有一些刺激因素,例如在列值中使用双引号等。这是一个很好的库,可以帮助你:
尝试使用 HibernateTools 查询导出器 http://docs.jboss.org/tools/4.1.0.Final/en/hibernatetools/html_single/#d0e5010
我使用 FileWriter 将我的 hql(我正在使用带有 struts2 的 Hibernate)结果集导出到 csv,这也可能对您有帮助。我将 hql 结果集存储到 List(转换为 MYPojo)并使用 for 循环将数据写入文件并将其导出为 csv。它适用于我的应用程序。你可以访问 http://www.mkyong.com/java/how-to-export-data-to-csv-file-java/