开发者社区> chszs> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

报表工具之JasperReports+iReport(5)

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/1507911 报表工具之JasperReports+iReport(5) JasperReports作为一种开源的报表库为应用提供了强大的支持。
+关注继续查看
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/1507911

报表工具之JasperReports+iReport(5)


JasperReports作为一种开源的报表库为应用提供了强大的支持。其易用性和灵活性为系统的开发提供了极大的便利。
在报表生成过程中,使用JDBC等传统数据源操作方法获取数据的过程会消耗大量的系统时间,这样就需要利用其它手段来简化数据源操作。
在这种情况下,适当的使用ORM(Object/Relational Mapping)技术,能够很好的解决这个问题,对于系统性能的提升有很大的帮助。
1、JasperReports填充报表
要完成报表的填充,必须先完成用于报表的xml模板,其过程是先产生报表布局对象,再序列号该对象,存储在磁盘或者网络,用于产生特定应用的表格数据。
实际上,表单的设计过程就是用定义于xml文件中的java表达式来表现报表的布局。
编辑过程中会有各种保证数据一致性的验证,最终会产生相关数据的文档。
报表引擎必须先接受数据来产生报表,这些数据一般来源于各种数据源,报表引擎能直接接收用于填充表格的数据源对象,或者通过自身提供的JDBC连接对象来处理数据库的数据。
报表最终要产生一个新的对象来进行填充操作从而产生用于输出的文档对象,这也是一个存储在磁盘或者网络传输介质的序列化对象。
JasperReports的内置浏览器能直接查看结果或者以PDF,HTML,XML形式将其导出。
2、持久化技术和ORM
持久化(Persistence),即把数据保存到可永久保存的存储设备中(如磁盘)。
持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等。
ORM即“对象-关系型数据映射组件。对于O/R,即Object(对象)和Relational(关系型数据),表示必须同时使用面向对象和关系型数据进行开发。
MVC(Model View Control)中的Model包含了复杂的业务逻辑和数据逻辑,以及数据存取机制(如JDBC的连接、SQL生成和Statement创建、还要ResultSet结果集的读取等)。将这些复杂的业务逻辑和数据逻辑分离,以将系统的紧耦合关系转化为松耦合关系(即解耦合),是降低系统耦合度迫切要做的,也是持久化要做的工作。
MVC模式实现了架构上将表现层和数据处理层分离的解耦合,而持久化设计则实现了数据处理层内部的业务逻辑和数据逻辑分离的解耦合。
关系型数据库中的数据基本都是以一行行的数据进行存取的,而程序运行却是一个个对象进行处理,而目前大部分数据库驱动技术(如ADO.NET、JDBC、ODBC等)均是以行集的结果集一条条进行处理的。所以为解决这一困难,就出现ORM这一个对象和数据之间映射技术。
3、在JasperReports中使用Hibernate
Hibernate是一个开发源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
package src;

import java.util.HashMap;
import java.util.List;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.engine.JasperExportManager;

import org.hibernate.HibernateException;
import org.hibernate.MappingException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Simple1 {
 public static void main(String args[]){
  String sampleReportFile=new String("reports/sampleReport.jrxml");
  //Hibernate Result Set Holder.
  List bowlerInfo=null;
  try{
   //Configure the Hibernate session
   Configuration cfg=new Configuration();
   cfg.addResource("hibernate-mapping.xml");
   SessionFactory sessions=cfg.buildSessionFactory();
   //Open the Hibernate Session
   Session session=sessions.openSession();
   //Returns all SampleData records.
   //Simple POJO object.
   bowlerInfo=session.createQuery("from SampleData").list();
   //Fill the parameters
   HashMap parameters=new HashMap();
   parameters.put("ReportTitle","Bowling Scores");
   parameters.put("NoOfGames", new Integer(3));
   //Load the sample report file from the XML file
   //into the JasperDesign object.
   JasperDesign design=JRXmlLoader.load(sampleReportFile);
   //Compile the Report in Memory storing it in a JasperReport object
   //no .jasper report file is created.
   JasperReport report=new JasperCompileManager().compileReport(design);
   //Fill the report using the JRBeanCollectionDataSource passed
   //a Hibernate query result set.
   JasperPrint print=JasperFillManager.fillReport(report,parameters,new JRBeanCollectionDataSource(bowlerInfo));
   //Export to PDF file.
   JasperExportManager.exportReportToPdfFile(print,"simpleHibernatExample.pdf");
   //Close the Hibernate Session.
   session.close();   
  }catch(JRException jre){
   jre.printStackTrace();
  }catch(MappingException me){
   me.printStackTrace();
  }catch(HibernateException he){
   he.printStackTrace();
  }
 }
}
当Hibernate检索返回集合类型的对象时,使用JRBeanCollection接口可将数据通过Hibernate的POJO(Plain Old Java Object)实例映射到报表域中,使用JRXmlLoader.load(templateName)方法加载报表模板,最后通过JasperFillManager方法将数据填入模板中。
本例使用JasperExportManager.exportReportToPdfFile()方法将报表输出为PDF格式。JasperReports提供的net.sf.jasperreports.engine.JRExporter接口可以方便的将报表输出为PDF、XLS、CSV、RTF、HTML或者XML格式,目前以PDF和EXCEL格式较为通用。
4、总结
在JasperReports中使用了Hibernate以后,如果随业务更换数据源的话,只需要更好Hibernate的映射文件,极大提高了代码的可重用性,同时由于Hibernate本身对于查询的优化,也能很好的提高整个应用的效率,尽可能的节省开发时间。 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
报表引擎(JasperReport)对比图表工具(Echarts)
背景 有次聊天,突然遇到Echarts跟JasperReport是不是一样... 脑洞 肯定不一样啊,why?自己还真没整理过相关理论知识 上脑 立马查找资料,开始分析对比 结果 1、公式区别 报表=表格+图表 图表=图表 由此公式,很直观的确定,图表工具只是报表引擎的一部分内容。
1496 0
OpenGL ES From the Ground Up, Part 3: Viewports in Perspective
SATURDAY, APRIL 25, 2009 OpenGL ES From the Ground Up, Part 3: Viewports in Perspective Now that you got a taste of how to draw...
1102 0
报表工具之JasperReports+iReport(1)
报表工具之JasperReports+iReport 一、介绍 1)它可以PDF,HTML,XML等多种形式产生报表或动态报表,在新版本还支持CSV,XLS,RTF等格式的报表; 2)它按预定义的XML文档来组织数据,来源多(如:关系数据库,Java容器对象(collection,arrays)等); 报表的填充过程: 先产生报表设计对象->序列化该对象->存储在磁盘或网络->产生XML文件(表格数据)。
1022 0
报表工具之JasperReports+iReport(3)
报表工具之JasperReports+iReport(3) 1、配置XML文件 jasperreports的XML配置文件局域jasperreport.dtd文件而来。
982 0
iReport+jasperReports制作WEB报表
[声明]内容部分摘自网上,感谢网友共享 第一部分:环境配置 一、JDK、WEB服务器及数据库的安装与配置  (此处略,本文测试环境JDK1.5、Resin2.1.7、SQLServer2K)二、IReport的安装  下载地址http://ireport.
1298 0
JasperReport(2)——IReport使用数据源
在上一篇博客里面已经讲了IReport设置数据源的问题。在本博客中将讲述如何使用数据源。       这个时候就可以从左边的Fileds中选择相应的Filed托到右边的设计页面中     生成的预览界面: 对应的xml文件: ...
755 0
+关注
841
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载