• 开发者使用JasperReport——不同数据源之实体对象数据源


     

    前言

    上一篇我们使用了JRMapArrayDataSource数据源来与数据库进行交互,今天我们来介绍下如何使用实体对象作为数据源。

     

    正题

    跟之前的一样,我们要生成报表需要以下几个步骤:

    1.引入jar包,请看静态文本报表》 。


    2.新建报表模版:

    跟我们前一篇的AircraftReport报表模版是一样的,请参见《不同数据源之Map数据源》;

     

    3.编译报表模版,请看《静态文本报表》


    4.编写实体对象:

    作为数据源的实体对象需要注意:


    1)不能有公共的属性。


    2)必须有一个无参数的构造方法。


    3)所有的属性必须要有getterstter方法。

     

    我们新建一个AircraftData(因为报表模版中的字段是大写的,所以这里面的字段也定义的大写的):

     

    package com.dan.jasper;
    
    public class AircraftData {
    
    	public AircraftData(String id,String name,String sex){
    		setID(id);
    		setNAME(name);
    		setSEX(sex);
    	}
    	
    	public AircraftData(){
    		
    	}
    	
    	private String ID;
    	private String NAME;
    	private String SEX;
    	public String getID() {
    		return ID;
    	}
    
    	public void setID(String iD) {
    		ID = iD;
    	}
    
    	public String getNAME() {
    		return NAME;
    	}
    
    	public void setNAME(String nAME) {
    		NAME = nAME;
    	}
    
    	public String getSEX() {
    		return SEX;
    	}
    
    	public void setSEX(String sEX) {
    		SEX = sEX;
    	}
    	
    }


     

    5.编写servlet:

    由于实体对象数据源分为两种JRBeanArrayDataSource和JRBeanCollectionDataSource,下面将这两种形式都写出来:

    1JRBeanArrayDataSource:

     

    package com.dan.servlet;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PrintWriter;
    import java.io.StringWriter;
    import java.util.HashMap;
    
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import net.sf.jasperreports.engine.JRDataSource;
    import net.sf.jasperreports.engine.JasperRunManager;
    import net.sf.jasperreports.engine.data.JRBeanArrayDataSource;
    
    import com.dan.jasper.AircraftData;
    
    /**
     * 使用javabean作为数据源
     * @author zdd
     *
     */
    public class BeanArrayDSReportServlet extends HttpServlet {
    
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 2174316885912562306L;
    
    	private JRDataSource createReportDataSource(){
    		JRBeanArrayDataSource dataSource;
    		AircraftData[] resportRows = initializeMapArray();
    		dataSource = new JRBeanArrayDataSource(resportRows);
    		return dataSource;		
    	}
    	
    	private AircraftData[] initializeMapArray(){
    		AircraftData[] reportRows = new AircraftData[4];
    		
    		reportRows[0] = new AircraftData("n0", "zddn0", "female");
    		reportRows[1] = new AircraftData("n1", "zddn1", "female");
    		reportRows[2] = new AircraftData("n2", "zddn2", "female");
    		reportRows[3] = new AircraftData("n3", "zddn3", "female");
    		
    		return reportRows;
    	}
    	
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		 
    		ServletOutputStream servletOutputStream = resp.getOutputStream();
    		
    		InputStream reportStream = getServletConfig().getServletContext().getResourceAsStream("/WEB-INF/classes/reports/AircraftReport.jasper");
    		 
    		try{
    			JRDataSource dataSource = createReportDataSource();
    			
    			JasperRunManager.runReportToPdfStream(reportStream,servletOutputStream,new HashMap(),dataSource );
    			
    			resp.setContentType("application/pdf");
    			servletOutputStream.flush();
    			servletOutputStream.close();
    		}catch(Exception e){
    			StringWriter stringWriter = new StringWriter();
    			PrintWriter printWriter = new PrintWriter(stringWriter);
    			e.printStackTrace(printWriter);
    			resp.setContentType("text/plain");
    			resp.getOutputStream().print(stringWriter.toString());
    		}
    	}
    
    
    }
    
    
    
    
    
    

     

    2JRBeanCollectionDataSource:

     

    package com.dan.servlet;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PrintWriter;
    import java.io.StringWriter;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.HashMap;
    
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import net.sf.jasperreports.engine.JRDataSource;
    import net.sf.jasperreports.engine.JasperRunManager;
    import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
    
    import com.dan.jasper.AircraftData;
    
    /**
     * 使用javabean作为数据源
     * @author zdd
     *
     */
    public class BeanCollectionDSReportServlet extends HttpServlet {
    
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 2174316885912562306L;
    
    	private JRDataSource createReportDataSource(){
    		JRBeanCollectionDataSource dataSource;
    		Collection resportRows = initializeMapArray();
    		dataSource = new JRBeanCollectionDataSource(resportRows);
    		return dataSource;		
    	}
    	
    	private Collection initializeMapArray(){
    		ArrayList reportRows = new ArrayList();
    		
    		reportRows.add(new AircraftData("n0", "zddn0", "female"));
    		reportRows.add(new AircraftData("n1", "zddn1", "female"));
    		reportRows.add(new AircraftData("n2", "zddn2", "female"));
    		reportRows.add(new AircraftData("n3", "zddn3", "female"));
    		
    		return reportRows;
    	}
    	
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		 
    		ServletOutputStream servletOutputStream = resp.getOutputStream();
    		
    		InputStream reportStream = getServletConfig().getServletContext().getResourceAsStream("/WEB-INF/classes/reports/AircraftReport.jasper");
    		 
    		try{
    			JRDataSource dataSource = createReportDataSource();
    			
    			JasperRunManager.runReportToPdfStream(reportStream,servletOutputStream,new HashMap(),dataSource );
    			
    			resp.setContentType("application/pdf");
    			servletOutputStream.flush();
    			servletOutputStream.close();
    		}catch(Exception e){
    			StringWriter stringWriter = new StringWriter();
    			PrintWriter printWriter = new PrintWriter(stringWriter);
    			e.printStackTrace(printWriter);
    			resp.setContentType("text/plain");
    			resp.getOutputStream().print(stringWriter.toString());
    		}
    	}
    
    }

     

     

    5.配置web.xml,就是配置servlet

     

    6.运行项目

    看一下我的运行结果:

    1JRBeanArrayDataSource


     

    2JRBeanCollectionDataSource

     

    小结:

     

        其实这个实体对象作为数据源对于我们来说是很常用的,因为我们现在都是使用的hibernate,所以我们都会避免在其他地方直接与数据库进行交互,而这个对于实体对象数据源的支持满足了我们的要求。

  • 相关阅读:
    数据库被注入daxia123原因及解决办法
    Alipay数字证书管理员权限问题
    关闭数据库的xp_cmdshell命令以防止黑客攻击
    如何使用JavaScript来写ASP程序
    VBscript操作DOM
    如何做好性能压测丨压测环境设计和搭建
    10倍性能提升!DLA SQL推出基于Alluxio的数据湖分析加速功能
    高德地图驾车导航内存优化原理与实战
    「直播实录」中英数据库专家谈:数据库的过去、未来和现在
    Flink 助力美团数仓增量生产
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3041053.html
Copyright © 2020-2023  润新知