SSM框架使用Echarts绘制动态数据可视化图表

SSM框架使用Echarts绘制动态数据可视化图表

1.前言

上一篇是说的jsp+servlet+echarts来实现动态数据的可视化,jsp+servlet+echarts实现动态数据的可视化
现在把它放到SSM框架里面去做一个读取mysql数据来实现动态可视化。

数据请求过程如下:
1.客户端通过ajax发送请求;
2.控制层controller接收请求;
3.获取mysql数据,转为Json格式并返回给客户端;
4.客户端接收数据后显示。

现在就以SSM框架使用Echarts绘制动态数据可视化图表,做个学习记录。

2.实践过程

如果你不会搭建SSM框架的话,可以参考:
SSM框架整合_java web普通版
SSM框架整合_maven版

我们这次使用ssm+echarts来实现一个小功能,查询学生的成绩并且制成图(饼状图和柱形图)。

打开eclipse,新建一个maven项目,搭建好ssm框架。
如图:
这里写图片描述

然后在数据库里面新建一个newstudentinfo表。

创建表(newstudentinfo)

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `newstudentinfo`
-- ----------------------------
DROP TABLE IF EXISTS `newstudentinfo`;
CREATE TABLE `newstudentinfo` (
  `id` int(11) NOT NULL auto_increment COMMENT '学号',
  `name` varchar(20) default NULL COMMENT '姓名',
  `score` decimal(4,2) default NULL COMMENT '分数',
  `subject` int(11) default NULL COMMENT '科目编号',
  `teacherid` int(11) default NULL COMMENT '任课教师编号',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of newstudentinfo
-- ----------------------------
INSERT INTO `newstudentinfo` VALUES ('1', '柒晓白', '80.00', '1', '1');
INSERT INTO `newstudentinfo` VALUES ('2', '邹涛', '20.00', '1', '3');
INSERT INTO `newstudentinfo` VALUES ('3', '王二', '85.00', '2', '4');
INSERT INTO `newstudentinfo` VALUES ('4', 'Test', '45.00', '3', '5');

填入数据:
这里写图片描述

好了,反正就是ssm+mysql数据库准备完毕以后,开始使用echarts。

SSM框架使用Echarts绘制动态数据可视化图表的源代码从这开始。

1.客户端通过ajax发送请求;
新建一个前台页面
柱状图: myecharts.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>ECharts</title>
<!-- 引入jquery.js -->
<script type="text/javascript"
	src="${pageContext.request.contextPath}/js/jquery-3.2.1.min.js"></script>
<!-- 引入 echarts.js -->
<script type="text/javascript"
	src="${pageContext.request.contextPath}/js/echarts.common.min.js"></script>
</head>
<body style="align: center; margin: 56px 0px 0px 25%;">
	<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
	<div id="main" style="width: 600px; height: 400px;"></div>

	<a href="index.jsp">返回首页</a>

</body>
<script type="text/javascript">
	var myChart = echarts.init(document.getElementById('main'));
	// 显示标题,图例和空的坐标轴
	myChart.setOption({
		title : {
			text : '异步数据加载示例'
		},
		tooltip : {},
		legend : {
			data : [ '销量' ]
		},
		xAxis : {
			data : []
		},
		yAxis : {},
		series : [ {
			name : '销量',
			type : 'bar',
			data : []
		} ]
	});

	myChart.showLoading(); //数据加载完之前先显示一段简单的loading动画

	var names = []; //类别数组(实际用来盛放X轴坐标值)
	var nums = []; //销量数组(实际用来盛放Y坐标值)

	$.ajax({
		type : "post",
		async : true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
		url : "echartServlet", //请求发送到TestServlet处
		data : {},
		dataType : "json", //返回数据形式为json
		success : function(result) {
			//请求成功时执行该函数内容,result即为服务器返回的json对象
			if (result) {
				for (var i = 0; i < result.length; i++) {
					names.push(result[i].name); //挨个取出类别并填入类别数组
				}
				for (var i = 0; i < result.length; i++) {
					nums.push(result[i].num); //挨个取出销量并填入销量数组
				}
				myChart.hideLoading(); //隐藏加载动画
				myChart.setOption({ //加载数据图表
					xAxis : {
						data : names
					},
					series : [ {
						// 根据名字对应到相应的系列
						name : '销量',
						data : nums
					} ]
				});

			}

		},
		error : function(errorMsg) {
			//请求失败时执行该函数
			alert("图表请求数据失败!");
			myChart.hideLoading();
		}
	})
</script>
</html>

再建一个PieCharts.jsp
饼图PieCharts.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <script src="${pageContext.request.contextPath}/js/jquery-3.2.1.min.js"></script>
    <script src="${pageContext.request.contextPath}/js/echarts.common.min.js"></script>
</head>
<body style=" text-align: center; ">
<div id="pie" style="width: 500px;height: 300px;"></div>
<a href ="index.jsp">返回首页</a>

<script>
    //初始化echarts
    var pieCharts = echarts.init(document.getElementById("pie"));
    //设置属性
    pieCharts.setOption({
        title: {
            text: '学生成绩',
            subtext: '成绩比',
            x: 'center'
        },
        tooltip: {
            trigger: 'item',
            formatter: "{a} <br/>{b} : {c} ({d}%)"
        },
        legend: {
            orient: 'vertical',
            x: 'left',
            data: []
        },
        toolbox: {
            show: true,
            feature: {
                mark: {show: true},
                dataView: {show: true, readOnly: false},
                magicType: {
                    show: true,
                    type: ['pie', 'funnel'],
                    option: {
                        funnel: {
                            x: '25%',
                            width: '50%',
                            funnelAlign: 'left',
                            max: 1548
                        }
                    }
                },
                restore: {show: true},
                saveAsImage: {show: true}
            }
        },
        calculable: true,
        series: [
            {
                name: '成绩',
                type: 'pie',
                radius: '55%',
                center: ['50%', '60%'],
                data: []
            }
        ]
    });
    //显示一段动画
    pieCharts.showLoading();
    //异步请求数据
    $.ajax({
        type: "post",
        async: true,
        url: '${pageContext.request.contextPath}/getData',
        data: [],
        dataType: "json",
        success: function (result) {
            pieCharts.hideLoading();//隐藏加载动画
            pieCharts.setOption({
                title: {
                    text: '学生成绩',
                    subtext: '成绩比',
                    x: 'center'
                },
                tooltip: {
                    trigger: 'item',
                    formatter: "{a} <br/>{b} : {c} ({d}%)"
                },
                legend: {
                    orient: 'vertical',
                    x: 'left',
                    data: []
                },
                toolbox: {
                    show: true,
                    feature: {
                        mark: {show: true},
                        dataView: {show: true, readOnly: false},
                        magicType: {
                            show: true,
                            type: ['pie', 'funnel'],
                            option: {
                                funnel: {
                                    x: '25%',
                                    width: '50%',
                                    funnelAlign: 'left',
                                    max: 1548
                                }
                            }
                        },
                        restore: {show: true},
                        saveAsImage: {show: true}
                    }
                },
                calculable: true,
                series: [
                    {
                        name: '成绩',
                        type: 'pie',
                        radius: '55%',
                        center: ['50%', '60%'],
                        data: result
                    }
                ]
            });
        }
    })
</script>
</body>
</html>

注意,echarts只接受json格式的数据,所以后台返回的就是json数据,

[NewStudent{id=1, name=‘柒晓白’, score=80, subject=1, teacheridl=0}]

2.控制层controller接收请求和获取mysql数据,转为Json格式并返回给客户端;
在控制层新建一个EchartsController.java
代码:

package com.koali.web;

import com.koali.model.NewStudent;
import com.koali.model.sorceResult;
import com.koali.service.NewStudentInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.ArrayList;
import java.util.List;

@Controller
public class EchartsController {
	@Autowired
	private NewStudentInfoService newStudentInfoService;

	//首页柱状图
	@RequestMapping(value = "/hello")
	@ResponseBody
	public List<NewStudent> page() {
		//list获取sql数据
		List<NewStudent> newStudents = newStudentInfoService.getAllStudent();
		System.out.println("hello页面请求数据:" + newStudents.size());
		System.out.println("柱状图请求数据:" +newStudents.toString());
		return newStudents;
	}

	@RequestMapping(value = "/getScore")
	@ResponseBody
	public List<Integer> getScore() {
		List<NewStudent> newStudents = newStudentInfoService.getAllStudent();
		List<Integer> scores = null;
		for (NewStudent newStudent : newStudents) {
			scores.add(newStudent.getScore());
		}
		System.out.println("饼图请求数据:" +scores.toString());
		return scores;
	}

	@RequestMapping(value = "/myeCharts")
	public String myeCharts() {
		return "Hello";
	}

	@RequestMapping(value = "/getPieCharts")
	public String getPieCharts() {
		return "PieCharts";
	}

	@RequestMapping(value = "/getData")
	@ResponseBody
	public List<sorceResult> getData() {
		List<NewStudent> students = newStudentInfoService.getAllStudent();
		List<sorceResult> results = new ArrayList<sorceResult>();
		for (NewStudent newStudent : students) {
			// 把学生的成绩和姓名封装到一个result
			sorceResult result = new sorceResult(newStudent.getScore(), newStudent.getName());
			results.add(result);
		}
		System.out.println("json数据:"+results);
		return results;
	}
}

上面实际上就是接受页面请求,然后获取数据库数据,保存到list集合,然后list转json字符串,作为json对象返回前台jsp页面。

3.客户端接收数据后显示
在上面的PieCharts.jsp和myecharts.jsp里面,我们先是做了图表的初始化,那是把数据data留空的。
然后在
success: function (result) 这句接收数据成功以后,使用

pieCharts.setOption

开始重构图表数据,也就是把获取到的数据填入进去。

data: result

然后启动tomcat,运行项目,浏览器进入:

http://localhost:8080/JavaCharts/

如图:
这里写图片描述

点击查看学生成绩柱状图:
这里写图片描述

点击查看学生成绩饼图:
这里写图片描述

这样获取sql数据成功,而且可视化成功。
以上就是整个使用SSM框架使用Echarts绘制动态数据可视化图表的内容,源码也贴出来了,这个地方是独立的模块,如果你懂一些ssm框架的结构,那么直接复制代码是可以使用的。
最后推荐一个可视化在线绘制图表的网站:图说


整个项目源码:源码下载

如果没有积分,可以点击关注,然后留下邮箱,发给你。


You got a dream, you gotta protect it.
如果你有梦想的话,就要去捍卫它 。 ——《当幸福来敲门》

  • 37
    点赞
  • 271
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 185
    评论
SSM是指Spring+SpringMVC+MyBatis三个框架的整合,而Echarts是一款非常流行的数据可视化库,可以将数据转化为可视化的图表展示。 要实现SSM整合Echarts,需要以下步骤: 1. 引入Echarts的相关依赖,可以在Maven中添加以下依赖: ``` <dependency> <groupId>com.github.abel533</groupId> <artifactId>echarts</artifactId> <version>4.8.0-rc1</version> </dependency> ``` 2. 在SpringMVC中配置Echarts的视图解析器,可以在springmvc-servlet.xml中添加以下配置: ``` <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="com.github.abel533.echarts.view.EchartsView"/> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean> ``` 3. 在Controller中处理数据,并将数据传递给Echarts视图解析器,例如: ``` @RequestMapping("/echarts") public ModelAndView echarts() { List<Map<String, Object>> data = new ArrayList<>(); Map<String, Object> map1 = new HashMap<>(); map1.put("name", "数据1"); map1.put("value", 100); data.add(map1); Map<String, Object> map2 = new HashMap<>(); map2.put("name", "数据2"); map2.put("value", 200); data.add(map2); ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("data", data); modelAndView.setViewName("echarts"); return modelAndView; } ``` 4. 在JSP中使用Echarts标签库生成图表,例如: ``` <%@ taglib prefix="echarts" uri="http://echarts.baidu.com/echarts2/doc/option.html" %> <html> <head> <title>Echarts Demo</title> <script type="text/javascript" src="${pageContext.request.contextPath}/js/echarts.min.js"></script> </head> <body> <div id="main" style="width: 600px;height:400px;"></div> <echarts:line id="main" title="数据展示" width="600" height="400" theme="macarons"> <echarts:tooltip show="true"/> <echarts:legend data="['数据1','数据2']"/> <echarts:xAxis type="category" data="['周一','周二','周三','周四','周五','周六','周日']"/> <echarts:yAxis type="value"/> <echarts:series name="数据1" type="bar" data="${data}"/> <echarts:series name="数据2" type="bar" data="${data}"/> </echarts:line> </body> </html> ``` 以上就是SSM整合Echarts实现数据可视化的基本步骤。需要注意的是,在实际应用中,需要根据具体需求调整配置和代码实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 185
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖一点雨

原创不易,鼓励鼓励~~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值