把JfreeChart集成在Hibernate+SpringMVC框架项目中(附源码)

来源:互联网 发布:淘宝买家达到钻号 编辑:程序博客网 时间:2024/06/02 04:55

在使用HIbernate作为持久层开发时,如果想使用JfreeChart来完成一些操作,需要注意以下一些方面:
1.首先需要在项目中导入对应的JfreeChart包并放入lib之下,最主要的就是JFreeChart1.0.18.jar 和 jcommon-1.0.22.jar 文件这两个文件。文末提供的源码下载里面有对应的文件夹包含了主要可以导入的jar。
2.要注意在web.xml里面配置好加上关于JfreeChart的对应配置。

<servlet>        <servlet-name>DisplayChart</servlet-name>        <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>DisplayChart</servlet-name>        <url-pattern>/DisplayChart</url-pattern>    </servlet-mapping>

3.之后要注意在使用了Hibernate来对持久层操作不同于使用一般jdbc中的Statement和Connection然后获得结果集的方式来把数据库中的数据传到JfreeChart对应所需要使用的经过DefaultPieDataset dataset = new DefaultPieDataset(); 操作后的dataset中。
所以在此我采用了先使用Query接口取出数据然后封装到ArrayList中,再通过迭代器方式把数据存入dataset中。
下面是两种方式的对比:
jdbc中:

Statement statement = connect.createStatement( );        ResultSet resultSet = statement.executeQuery("select * from  mobile_tbl" );        DefaultPieDataset dataset = new DefaultPieDataset();        while( resultSet.next( ) ) //行光标下移,ResultSet独有的方式。      {             dataset.setValue(              resultSet.getString( "mobile_brand" ) ,             Double.parseDouble( resultSet.getString( "unit_sale" )));          }

我在Hibernate在采用的方式:

Query query1 = (Query) this.getSession().createQuery("select legaltype from Chart where chart=?").setParameter(0, chart);        //获取number        Query query2 = (Query) this.getSession().createQuery("select number from Chart where chart=?").setParameter(0, chart);        ArrayList<Chart> datas1 = (ArrayList<Chart>) query1.list();        ArrayList<Chart> datas2 = (ArrayList<Chart>) query2.list();        /*System.out.println("----获取legaltype----"+datas1);         System.out.println("-----获取number-----"+datas2);*/        Iterator it1 = datas1.iterator();        Iterator it2 = datas2.iterator();        DefaultPieDataset dataset = new DefaultPieDataset();                while(it1.hasNext() && it2.hasNext()) { //采用迭代器方式把所得数据传入,同时注意强制类型转换            dataset.setValue((String)it1.next(), (int)it2.next());             }        System.out.print("---输出CityDao中的dataset--- "+dataset);        Object c = dataset;

4.由于是采用了Hibernate+SpringMVC方式实现,所以需要在Controller层进行一定的方法来生成JfreeChart的图片

首先要注意之前在Dao层所获得的dataset通过方法return后得到的是一个Object对象,所以需要在Controller层先强转成为(DefaultPieDataset)类型。

同时又因为采用的是SpringMVC跳转页面的方式,所以要把最后生成的PNG图片传到对应的jsp页面中必须采用model方式传递,并在之后的jsp页面中用request.getAttribute方法来获得。

以下是Controller层所需要的一些操作:

DefaultPieDataset dataset = (DefaultPieDataset) cityService.findChart(chart);        System.out.println("-------输出controller中dataset-------"+dataset);        JFreeChart jchart=ChartFactory.createPieChart("法制问题分布图", dataset, true, true, true);        PiePlot pieplot=(PiePlot)jchart.getPlot();        pieplot.setLabelFont(new Font("宋体",0,11));        // 设置饼图是圆的(true),还是椭圆的(false);默认为true          pieplot.setCircular(true);        // 没有数据的时候显示的内容        pieplot.setNoDataMessage("无数据显示");        StandardPieSectionLabelGenerator standarPieIG = new StandardPieSectionLabelGenerator("{0}:({1}.{2})", NumberFormat.getNumberInstance(), NumberFormat.getPercentInstance());          pieplot.setLabelGenerator(standarPieIG);                String fileName=ServletUtilities.saveChartAsPNG(jchart, 700, 500, null);        System.out.println("-------输出controller中fileName-------"+fileName);        model.addAttribute("jfreechart",fileName);

5.最后,得注意jsp页面中显示PNG图片的路径问题,因为要SpringMVC为返回的逻辑页面加了一定的前后缀,容易出问题。

视图显示所需操作:

<body>    <%        String fileName=(String)request.getAttribute("jfreechart");        System.out.println("-------输出jsp中fileName-------"+fileName);        String graphURL = request.getContextPath() + "/DisplayChart?filename="+fileName;         System.out.println("-------输出jsp中graphURL-------"+graphURL);    %>        <td><% //System.out.println("---取出JfreeChart对象---"+request.getAttribute("jfreechart")); %></td>    <% //String fileName=(String)request.getAttribute("jfreechart"); %>    <img src="<%=graphURL%>" width="700" height="500" border="0"/></body>

初学者可以关注我的微信公众号,学习交流
这里写图片描述
源码下载

阅读全文
0 0