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

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结构,代码如下:

@Override
public Option selectRemoveCauses() throws BusinessException {
    //查询前20
    PageHelper.startPage(1, 20, false);
    //数据库查询获取统计数据
    List<Map<String, Object>> list = kc22Mapper.selectRemoveCauses();
    //为了数据从大到小排列,这里需要倒叙
    Collections.sort(list, new Comparator<Map<String, Object>>() {
        @Override
        public int compare(Map<String, Object> o1, Map<String, Object> o2) {
            return -1;
        }
    });
    //创建Option
    Option option = new Option();
    option.title("剔除药品").tooltip(Trigger.axis).legend("金额(元)");
    //横轴为值轴
    option.xAxis(new ValueAxis().boundaryGap(0d, 0.01));
    //创建类目轴
    CategoryAxis category = new CategoryAxis();
    //柱状数据
    Bar bar = new Bar("金额(元)");
    //饼图数据
    Pie pie = new Pie("金额(元)");
    //循环数据
    for (Map<String, Object> objectMap : list) {
        //设置类目
        category.data(objectMap.get("NAME"));
        //类目对应的柱状图
        bar.data(objectMap.get("TOTAL"));
        //饼图数据
        pie.data(new PieData(objectMap.get("NAME").toString(), objectMap.get("TOTAL")));
    }
    //设置类目轴
    option.yAxis(category);
    //饼图的圆心和半径
    pie.center(900,380).radius(100);
    //设置数据
    option.series(bar, pie);
    //由于药品名字过长,图表距离左侧距离设置180,关于grid可以看ECharts的官方文档
    option.grid().x(180);
    //返回Option
    return option;
}

代码中的注释很详细。

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

@RequestMapping("/removecauses")
public
@ResponseBody
WebResult removecauses() throws Exception {
    WebResult result = new WebResult();
    try {
        Option option = injuryService.selectRemoveCauses();
        result.isOK();
        result.setData(option);
    } catch (BusinessException e) {
        result.setException(e);
    }
    return result;
}

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

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

<body style="padding:0">
<div style="padding:10px;clear: both;">
    <div id="psLine" style="height:600px;"></div>
</div>
</body>
<script src="jslib/echarts/echarts-all.js"></script>
<script type="text/javascript">
    //图表
    var psLineChar = echarts.init(document.getElementById('psLine'));

    //查询
    function loadDrugs() {
        psLineChar.clear();
        psLineChar.showLoading({text: '正在努力的读取数据中...'});
        $.getJSON('analysis/removecauses.html', function (data) {
            if (data.success) {
                psLineChar.setOption(data.data, true);
                psLineChar.hideLoading();
            } else {
                alert('提示', data.msg);
            }
        });
    }
    //载入图表
    loadDrugs();
</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

时间: 2024-10-14 06:54:19

ECharts-Java使用Java快速开发ECharts图表的相关文章

如何提高码农产量,基于java的web快速开发平台之自定义表单开发随笔

老板 :下班前一定写完? 程序猿:可以,下班前能一定给! 第二天早上上班~~~ 老板:这都第二天了,怎么没写完? 程序猿:我还没有下班呢! 哎!程序猿的痛啊 公司上线的项目有不少销售记录表,又是报价单,又是仓储表,还有什么请假单之类的.一开始,还觉得不就一些表单吗,有什么难的.结果,实际进行起来,才发现,字段什么的是不难,难的是整体的架构啊!每张表的架构都不一样,又不能套用,每个控件的布局啊,表格的宽度和高度,都要自己慢慢去试.这样就非常麻烦了,在开发了几张表单之后,我真的是有些难以忍受了. P

几款java工作流程引擎快速开发平台比较

相对传统代码开发,快速开发平台在开发周期.成本上以及扩展性方面都有非常大的优势.如果每个项目都要从零开始,代码无复用率:所有的基础功能需要一行一点的敲代码,开发效率非常低,所以使用传统的开发工具已经不能满足现有程序员的诉求,越来越多的企业和开发人员选择java快速开发平台.为了更好地帮助大家找到适合自己的流程引擎, 快速地完成流程引擎技术架构选型, 快速地完成项目交付.下面一起来看看几款java工作流引擎快速开发平台. 希望您能从中找到适合您自己的流程引擎.ActivitiActiviti是由j

java代码生成器 快速开发平台 二次开发 外包项目利器 springmvc SSM后台框架源码

A 调用摄像头拍照,自定义裁剪编辑头像,头像图片色度调节B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势D 集成安全权限框架shiro  Shiro 是一个用 Java 语言实现的框架,通过一

JAVA快速开发平台 - 开源 免费 - JEECG

JEECG 微云快速开发平台 当前最新版本: 3.6.2(发布日期:20160315) 下载地址:http://git.oschina.net/jeecg/jeecg 前言: 随着 WEB UI 框架 ( EasyUI/Jquery UI/Ext/DWZ) 等的逐渐成熟,系统界面逐渐实现统一化,代码生成器也可以生成统一规范的界面! 代码生成+手工MERGE半智能开发将是新的趋势,单表数据模型和一对多数据模型的增删改查功能直接生成使用,可节省60%工作量,快速提高开发效率!!! 简介 JEECG(

Java web自定义标签按钮级别权限控制完美诠释(jplogic 快速开发平台)

接下来跟大家聊聊JavaWeb中权限控制,往大的方向说可以聊聊整合应用系统中的权限控制.在聊权限控制之前先跟大家聊聊RBAC.那么什么是RBAC呢?RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联的,用户通过成为适当角色的成员而得到这些角色的权限.这就极大地简化了权限的管理.在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色.角色可依新的需求和系统的

Android 网络请求json数据,解析json数据,生成对应的java bean类一步到位,快速开发

Android 网络请求一般都涉及到图片和JSON数据,怎样快速的请求网络JSON数据,解析JSON数据,并且一步生成自己想要的Java bean实体类?这个涉及到Android 开发效率的问题.由于接触Android 网络这方面比较多,自然就找到一些好的方法来快速开发Android 网络模块的相关内容,接下来就为大家揭晓 一步快速请求,解析JSON 数据生成对应的Java bean实体类的方法. 注:我们先把思路讲解下吧: 1.网络请求JSON数据代码可以自己写,当然我还是推荐使用网络上开源的

将notepad++打造成java快速开发IDE

参考文章:http://blog.csdn.net/mdyyzc/article/details/7653096 有时候要试验一小段代码,打开eclipse又需要忍受漫长的煎熬(电脑配置较低,见谅).于是,notepad++搭配插件建立一个java快速开发的ide环境你值得拥有. 首先下载本文主角--nppexec插件,下载地址: http://www.softpedia.com/get/Office-tools/Text-editors/NppExec.shtml #不知道出于什么原因使用no

java快速开发平台可视化开发表单

XJR java快速开发平台,简单的理解就是:开发人员以某种编程语言或者某几种编程语言(比如:目前流行的多种web技术,包括springboot, JPA,Druid, Activiti,Lombok,swagger,poi,WebSocket,Jquery,BootStrap, maven,Jenkins 等等 )为基础,将各种需要的功能封装在不同的层中,具大家调用而开发出来的一个软件. 这个软件其实不是一个最终的软件产品,它是一个二次开发软件框架,用户可以在这个产品上进行各种各样的软件产品的

[快速开发平台]JAVA快速开发平台

自己想做些东西,找了一些快速开发平台来试试看,都还不错,我整理了一些.毕竟站在巨人的肩膀上嘛.http://pan.baidu.com/s/1qWOgQnU这里有三个 AOS:http://www.oschina.net/p/aosJEECG:http://www.oschina.net/p/jeecg Eova:http://www.oschina.net/p/eova具体的内容自己找找咯.网盘里的代码是可以拿来直接用的.后面两个是MAVEN.放假了.6号北京见.