ECharts-Java使用Java快速开发ECharts图表

来源:互联网 发布:页游推荐 知乎 编辑:程序博客网 时间:2024/06/05 10:30

ECharts-Java类库地址:http://git.oschina.net/free/ECharts


百度ECharts地址:http://echarts.baidu.com/


大概在5个月前的时候,有个项目需要用到图表,百度ECharts很不错,就选择了ECharts。


我的项目是SpringMVC + Mybatis,当从数据库获取数据后,我不知道该如何处理这些数据了,是传到前台拼ECharts的Option结构还是在后台拼Option的JSON结构?


两种方式我都尝试了:

第一种在前台拼会导致逻辑很乱,JS很多很麻烦,很不好维护。

第二种在后台构造JSON结构,这种仍然很麻烦,由于我现在只是需要某个样子的图表,因此我创建一些需要的数据结构,然后各种乱七八糟的类都出来了。想到什么写什么,仍然很乱,仍然很难维护。


怎么办?


为了解决这个问题,我用业余时间,一个晚上写了一个ECharts-Java类库的基础数据结构。第二天在项目中试用了一下,不过当时说图表不重要,不用写这功能了。之后我在项目中就没用过ECharts-Java类库了。


但是我一直在想更简单的编码方式,因此增加了链式调用,让写java代码和js代码一样的方便和快捷,效率提高了很多。


到了现在(2015-01-27)这个项目突然需要几个图表了,我终于算是第一次用上了ECharts-Java类库,开发ECharts-Java类库的时候写了很多测试,所以我用起来很顺手,写的很快,确实非常的方便。


好多使用ECharts-Java类库的人都问我有没有实际的例子,我一直都说看测试代码官网例子去吧。我当时真没有实际的例子,到后来写过一个简单的例子(【实例教程】Echarts 的 Java 封装类库),不过数据是模拟的。


现在终于可以拿出一个实际的例子来简单演示了。


系统:SpringMVC+Mybatis


先看最后的效果图:



接下来通过代码来简单讲解:


首先通过Mybatis获取数据,从上图也能看出来,我需要的数据一个是药名,一个是金额,一个简单的统计SQL就可以完成。

因为数据很简单,我使用Mybatis的时候返回值直接用的List<Map<String,Object>>。


然后在Service层构造Option结构,代码如下:

[java] view plain copy
  1. @Override  
  2. public Option selectRemoveCauses() throws BusinessException {  
  3.     //查询前20  
  4.     PageHelper.startPage(120false);  
  5.     //数据库查询获取统计数据  
  6.     List<Map<String, Object>> list = kc22Mapper.selectRemoveCauses();  
  7.     //为了数据从大到小排列,这里需要倒叙  
  8.     Collections.sort(list, new Comparator<Map<String, Object>>() {  
  9.         @Override  
  10.         public int compare(Map<String, Object> o1, Map<String, Object> o2) {  
  11.             return -1;  
  12.         }  
  13.     });  
  14.     //创建Option  
  15.     Option option = new Option();  
  16.     option.title("剔除药品").tooltip(Trigger.axis).legend("金额(元)");  
  17.     //横轴为值轴  
  18.     option.xAxis(new ValueAxis().boundaryGap(0d, 0.01));  
  19.     //创建类目轴  
  20.     CategoryAxis category = new CategoryAxis();  
  21.     //柱状数据  
  22.     Bar bar = new Bar("金额(元)");  
  23.     //饼图数据  
  24.     Pie pie = new Pie("金额(元)");  
  25.     //循环数据  
  26.     for (Map<String, Object> objectMap : list) {  
  27.         //设置类目  
  28.         category.data(objectMap.get("NAME"));  
  29.         //类目对应的柱状图  
  30.         bar.data(objectMap.get("TOTAL"));  
  31.         //饼图数据  
  32.         pie.data(new PieData(objectMap.get("NAME").toString(), objectMap.get("TOTAL")));  
  33.     }  
  34.     //设置类目轴  
  35.     option.yAxis(category);  
  36.     //饼图的圆心和半径  
  37.     pie.center(900,380).radius(100);  
  38.     //设置数据  
  39.     option.series(bar, pie);  
  40.     //由于药品名字过长,图表距离左侧距离设置180,关于grid可以看ECharts的官方文档  
  41.     option.grid().x(180);  
  42.     //返回Option  
  43.     return option;  
  44. }  

代码中的注释很详细。


Service返回Option后,在Controller层返回,Controller层代码如下:

[java] view plain copy
  1. @RequestMapping("/removecauses")  
  2. public  
  3. @ResponseBody  
  4. WebResult removecauses() throws Exception {  
  5.     WebResult result = new WebResult();  
  6.     try {  
  7.         Option option = injuryService.selectRemoveCauses();  
  8.         result.isOK();  
  9.         result.setData(option);  
  10.     } catch (BusinessException e) {  
  11.         result.setException(e);  
  12.     }  
  13.     return result;  
  14. }  

SpringMVC配置的返回JSON,这里的WebResult不用多考虑,就是一层统一的封装,和ECharts图表无关。


然后是前台页面,使用jQuery的getJSON方法获取数据,完整的页面代码如下:

[html] view plain copy
  1. <body style="padding:0">  
  2. <div style="padding:10px;clear: both;">  
  3.     <div id="psLine" style="height:600px;"></div>  
  4. </div>  
  5. </body>  
  6. <script src="jslib/echarts/echarts-all.js"></script>  
  7. <script type="text/javascript">  
  8.     //图表  
  9.     var psLineChar = echarts.init(document.getElementById('psLine'));  
  10.   
  11.     //查询  
  12.     function loadDrugs() {  
  13.         psLineChar.clear();  
  14.         psLineChar.showLoading({text: '正在努力的读取数据中...'});  
  15.         $.getJSON('analysis/removecauses.html', function (data) {  
  16.             if (data.success) {  
  17.                 psLineChar.setOption(data.data, true);  
  18.                 psLineChar.hideLoading();  
  19.             } else {  
  20.                 alert('提示', data.msg);  
  21.             }  
  22.         });  
  23.     }  
  24.     //载入图表  
  25.     loadDrugs();  
  26. </script>  

根据ECharts文档,这里将<script>都放到了</body>的后面。

代码很简单,定义了一个id="psLine"的div,然后使用echarts.init获取图表对象。


使用$.getJSON获取数据,然后调用psLineChar.setOption(data.data, true);将数据加载进来。


实现这样一个图表的整个过程是相当简单的,只要有数据,需要什么样的图表,很容易就能写出来。


使用ECharts-Java类库是不是很方便?


ECharts-Java类库地址:http://git.oschina.net/free/ECharts

阅读全文
'); })();
1 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 澳洲移民配额用不完怎么办 去美国探亲怎么办签证 去伊朗的签证怎么办 房产证被偷了怎么办 打黑工被发现怎么办 几年前被犬咬没打针怎么办 对狂犬疫苗过敏怎么办 想去墨尔本留学怎么办 大学没交学费会怎么办 交学费收据丢了怎么办 上海浦东金科苑幼儿园统筹怎么办 红酒瓶塞掉了怎么办 红酒瓶塞丢了怎么办 收入证明没有公章怎么办 父母没工作怎么办签证 在温哥华怎么办新西兰签证 上班第一天无聊怎么办 上班紧张不自信怎么办 销售到了30岁怎么办 转行会计没经验怎么办 澳洲coe被取消怎么办 父母不同意嫁远怎么办 家人不同意我们在一起怎么办 语言课申请不到怎么办 墨尔本大学均分不够怎么办 去澳洲旅游签证怎么办 换新护照澳大利亚签证怎么办 大学错过交学费日期怎么办 留学加拿大申请工签被拒怎么办 英国大学挂科怎么办 小孩子学不进去怎么办 大学生学不进去怎么办 高考没考上本科怎么办 想读书家里没钱怎么办 考上大学没钱上怎么办 儿子没考上大学怎么办 后悔没上大学怎么办 把学费花了怎么办 临床预科挂科怎么办 补录了预科怎么办 美国预科没过怎么办