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

本文介绍如何在使用Hibernate作为持久层的项目中集成JFreeChart图表库,包括配置步骤、数据处理方法及生成图表的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用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>

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值