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

报表工具之JasperReports+iReport(5)

简介: 报表工具之JasperReports+iReport(5) JasperReports作为一种开源的报表库为应用提供了强大的支持。其易用性和灵活性为系统的开发提供了极大的便利。
+关注继续查看

报表工具之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本身对于查询的优化,也能很好的提高整个应用的效率,尽可能的节省开发时间。 

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

相关文章
Three.js 之 Import Model 导入模型
Three.js 提供了很多原始模型,但如果我们需要更复杂的模型,最好使用 3D 软件建模,然后导入到场景中。本节我们就来学学如何导入一个做好的 3D 模型。 3D 模型的各种格式 3D 模型有各种各样的格式,详情可参考维基百科List_of_file_formats#3D_graphics。这些格式各有特点。接下来我们列举一些比较常见和流行的。 OBJ FBX STL PLY COLLADA 3DS GLTF
55 0
报表引擎(JasperReport)对比图表工具(Echarts)
背景 有次聊天,突然遇到Echarts跟JasperReport是不是一样... 脑洞 肯定不一样啊,why?自己还真没整理过相关理论知识 上脑 立马查找资料,开始分析对比 结果 1、公式区别 报表=表格+图表 图表=图表 由此公式,很直观的确定,图表工具只是报表引擎的一部分内容。
1509 0
jasperreport 模板格式 及ireport 设计器
jasperReport介绍: JasperReport是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,或者XML格式。该库完全由Java写成,可以用于在各种Java应用程序 IReport介绍: iReport 是为JasperReports Library和JasperReports Server设计的报表可视化设计器 通过iRep
2028 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...
1109 0
mysql中datetime比较大小问题 (转的)
方法一:   你也可以:select * from t1 where unix_timestamp(time1) > unix_timestamp('2011-03-03 17:39:05') and unix_timestamp(time1) < unix_timestamp('2011-03-03 17:39:52');就是用unix_timestamp函数,将字符型的时间,转成unix时间戳。
2381 0
报表工具之JasperReports+iReport(1)
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/1493334 报表工具...
738 0
+关注
jieforest
原ChinaUnix博客专家,见:http://blog.chinaunix.net/uid/301743.html
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载