使用JasperReport与iBATIS开发Web报表(一)

 JasperReport是一种采用纯Java实现的快速且非常流行的生成报表的类库。而对于任何的报表方案,取得数据并传递给报表引擎是其中最重要且最值得关心的方面。但遗憾的是,在这方面JasperReport本身似乎有一定的不足。而如今的很多Java应用程序,采用数据获取框架来进行数据的匹配与动态生成SQL。例如iBATIS数据映射框架。当然,如果只是使用JasperReport获取数据及管理数据的默认机制的话,不足以与现成的数据框架进行很好的平衡。但可喜的是,可以通过使用传递给JasperReport一个数据库的连接进行代替,当然这种连接可以通过使用XML进行非常方便的管理与配置。

     一、        准备工作

    与Hibernate类似,iBATIS也是一个ORM解决方案,不同的是两者各有侧重。Hibernate提供了Java对象到数据库表之间的直接映射,开发者无需直接涉及数据库操作的实现细节,实现了一站式的ORM解决方案。而iBATIS则采取了另一种方式,即提供Java对象到SQL(面向参数和结果集)的映射实现,实际的数据库操作需要通过手动编写SQL实现。

    iBATIS是又一个O/R Mapping解决方案,j2ee的O/R方案真是多,和Hibernate相比,iBATIS最大的特点就是小巧,上手很快。如果你不需要太多复杂的功能,iBATIS是能满足你的要求又足够灵活的最简单的解决方案。在本文的示例中,采用Spring+JSF+iBATIS的模式进行示例的开发。所使用的lib如下图所示:

   

使用JasperReport与iBATIS开发Web报表(一)  

 

二、        在iReport中可视化定制模板

  定制报表格式有二种方式,一种就是写jrxml文件,其实就是xml文件,只不过是后缀名不一样罢了。另一种方式更直接,就是生成一个JasperDesign类的实例,在japsperDesign中自己定义模板。jrxml文件也是通过一个JRXmlLoad加载过来,转成JasperDesign类的实例。也就是说写jrxml文件还需要进行解析,加载。现实中我们使用的报表一般格式比较固定,因而可以通过先使用iReport工具生成模板,再加载解析的方式。这种方式简单,而且可见性强。

  iReport做为一个优秀的报表设计器,有着功能非常强大的特性。作为开源的Java程序,不但有适合于Windows安装的应用程序,同时,还提供完全开放的源代码,可供参考及原理分析。在本文中,主要通过图形界面中的模板设计,以及与数据库的连接等一系列的操作,来介绍如何定制一定要求的报表模板。
  
  通过iReport可初见化的图形界面,可以设计出各种各样的简单或复杂的报表。通过iReport的这种可视化界面设计,可以为JasperReport提供优秀的报表模板,而无须去理解或是掌握那些复杂的XML语法。如此则可以Web报表开发节省大量的开发时间。
  
  在进行iReport模板设计之前,需要编写JavaBean类:MonthlySalesBean.java,代码如下:

  
  
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; public class MonthlySalesBean { private int employeeID;; private String last = null ; private String first = null ; private BigDecimal total = null ; private List sales = null ; private LatestSale latestSale = null ; public static List createBeanCollection () { List list = new ArrayList (); MonthlySalesBean msb = new MonthlySalesBean (); msb.setEmployeeID( 1 ); msb.setFirst( " John " ); msb.setLast( " Doe " ); msb.setTotal( new BigDecimal ( " 1600.50 " )); LatestSale ls = new LatestSale (); ls.setAmount( new BigDecimal ( " 32.21 " )); msb.setLatestSale(ls); list.add(msb); return list; } public int getEmployeeID() { return employeeID; } public void setEmployeeID( int employeeID) { this .employeeID = employeeID; } public String getFirst() { return first; } public void setFirst(String first) { this .first = first; } public String getLast() { return last; } public void setLast(String last) { this .last = last; } public BigDecimal getTotal() { return total; } public void setTotal(BigDecimal total) { this .total = total; } public List getSales() { return sales; } public void setSales(List sales) { this .sales = sales; } public LatestSale getLatestSale() { return latestSale; } public void setLatestSale(LatestSale latestSale) { this .latestSale = latestSale; } }
 

    将上面的类打成一个jar包,并置于classpath目录下,则iReport可以进行访问。使用JavaBean做为数据源,为了在设计报表时能够看到数据,在程序中要为iReport提供一个静态方法,该方法返回上面定义JavaBean的一个结果集,这个静态方法可能在程序运行中并不是必须的,但是在iReport中它确实必须的,换句话说,这个静态方法是专门为iReport量身定做的,为了iReport在设计报表时能够调用这个静态方法返回相应的JavaBean结果集,以便设计的报表放在Java项目中之前就能像使用SQL数据库数据源一样可以浏览。在iReport中先进行数据源的连接配置,此处采用是JavaBeans set data source连接方式:

使用JasperReport与iBATIS开发Web报表(一)

                 图2.在iReport进行数据源的连接  

你可能感兴趣的:(设计模式,sql,Web,Hibernate,ibatis)