使用带有JFreeCharts的Hibernate数据源

时间:2012-01-06 14:45:57

标签: java hibernate jfreechart

我有一个Java Web应用程序,允许用户选择一组字段(带有过滤器,聚合等),然后用于创建图表/图形。

应用程序背后的数据库是标准的PostGreSQL 9.04数据库,但我们使用Hibernate ORM来访问数据。

我现在的代码现在根据Web界面中的用户选择创建HQL查询(Hibernate查询语言)。我真正需要的是使用该查询创建JFreeCharts可用于构建图表的数据集的某种方式。

是否有任何JFreeChart和Hibernate集成示例?自己进行了研究之后,除了Hibernate论坛上的这篇文章之外,我真的找不到更多的内容,它说它可以完成,但没有详细说明如何:

https://forum.hibernate.org/viewtopic.php?f=6&t=997556

总结一下: 我有一个HQL查询,我想用它来创建一个数据源,JFreeCharts可以用它来创建饼图/条形图/堆积条形图/折线图。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

如果没有现有的实施方案,您可能会受到org.jfree.data.jdbc中所见的现有数据模型变体之一的启发。

答案 1 :(得分:0)

我尝试了一些。这是我的实体类的代码:

package com.gxet4n.jfreechart;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="mobile_tbl")
public class Mobile_tbl {

   @Id
   private int id;

   @Column(name="mobile_brand")
   private String mobile_brand;

   @Column(name="unit_sale")
   private int unit_sale;

   // getters and setters

}

然后这是我的主要课程的代码:

package com.gxet4n.jfreechart;

import java.io.File;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtils;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

public class PieChart_HQL {

    public static void main( String[ ] args )throws Exception {

    DefaultPieDataset dataset = new DefaultPieDataset( );
    DefaultCategoryDataset dataset2 = new DefaultCategoryDataset();
    try {

        SessionFactory sessionFactory = new Configuration().configure().addAnnotatedClass(Mobile_tbl.class).buildSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();

        Query<?> query = session.createQuery("FROM Mobile_tbl");
        List<Mobile_tbl> mobiles = (List<Mobile_tbl>)query.list();

        session.close();


        for (Mobile_tbl m : mobiles) {
            dataset.setValue(m.getMobile_brand(), m.getUnit_sale());
        }

        for (Mobile_tbl m : mobiles) {
            dataset2.setValue(m.getUnit_sale(),m.getMobile_brand(),"");
        }

    } catch (Exception e) {
         System.out.println(e.getMessage()); 
    }

      JFreeChart chart = ChartFactory.createPieChart(
                 "Mobile Sales",   // chart title           
                 dataset,          // data           
                 true,             // include legend          
                 true,           
                 false );
      JFreeChart barChart = ChartFactory.createBarChart(
                 "Mobiles Sales",           
                 "Mobile Brand",            
                 "Unit Sale",            
                 dataset2,          
                 PlotOrientation.VERTICAL,           
                 true, true, false);

              int width = 560;    /* Width of the image */
              int height = 370;   /* Height of the image */ 
              File pieChart = new File( "Pie_Chart_HQL.png" );
              ChartUtils.saveChartAsPNG(pieChart, chart, width, height);
              File barchart = new File( "Bar_Chart_HQL.png" );
              ChartUtils.saveChartAsPNG(barchart, barChart, width, height);
    }
}

最后有结果: Bar chart from HQL query Pie chart from HQL query

我使用了hibernate core 5.2.12.Finaljfreechart 1.5.0