Spring Boot 2.x基础教程:使用 ECharts 绘制各种华丽的数据图表

本文介绍了如何在Spring Boot应用中使用ECharts进行数据可视化,讲解了ECharts的基本概念,提供了配置和使用ECharts的步骤,包括引入依赖、创建Controller、编写HTML页面,展示了如何生成折线图,并给出了代码示例和调试工具。

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

个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 

通常,这类需求在客户端应用中不太会用到,但是在后端的各种统计分析模块会经常碰到。比如:通过折线图、柱状图、雷达图等可视化形式,更直观的展现和分析经营状况或系统运行情况。这里我们将引入的数据可视化组件库 ECharts来帮助我们完成这样的任务。

ECharts简介

ECharts是百度开源的一个前端组件。它是一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。

它提供了常规的折线图、柱状图、散点图、饼图、K线图,用于统计的盒形图,用于地理数据可视化的地图、热力图、线图,用于关系数据可视化的关系图、treemap、旭日图,多维数据可视化的平行坐标,还有用于 BI 的漏斗图,仪表盘,并且支持图与图之间的混搭。

file

除了已经内置的包含了丰富功能的图表,ECharts 还提供了自定义系列,只需要传入一个renderItem函数,就可以从数据映射到任何你想要的图形,更棒的是这些都还能和已有的交互组件结合使用而不需要操心其它事情。

你可以在下载界面下载包含所有图表的构建文件,如果只是需要其中一两个图表,又嫌包含所有图表的构建文件太大,也可以在在线构建中选择需要的图表类型后自定义构建。

动手试一试

第一步:创建一个基础Spring Boot应用,或者拿上一节的工程chapter4-1(仓库地址见文末)来进行加工。

第二步:在pom.xml中引入Web应用需要的web模块和模板引擎thymeleaf模块,比如用Thymeleaf的时候:

<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-web</artifactid>
</dependency>

<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-thymeleaf</artifactid>
</dependency>

第三步:编写一个Controller,将/路径的请求,映射到index.html页面

@Controller
public class HelloController {

    @GetMapping("/")
    public String index(ModelMap map) {
        return "index";
    }

}

第四步:在resources/templates目录下创建index.html页面,具体内容如下:




    <meta charset="UTF-8">
    <title>Spring Boot中使用ECharts</title>
    <script src="https://cdn.bootcss.com/echarts/4.6.0/echarts.min.js"></script>


<div id="main" style="width: 1000px;height:400px;"></div>


<script type="text/javascript">
    // 初始化ECharts组件到id为main的元素上
    let myChart = echarts.init(document.getElementById('main'));
    // 定义图标的配置项
    let option = {
        title: {
            text: 'Spring Boot中使用ECharts'
        },
        tooltip: {},
        // x轴配置
        xAxis: {
            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
        },
        // y轴配置
        yAxis: {},
        series: [{
            // 数据集(也可以从后端的Controller中传入)
            data: [820, 932, 901, 934, 1290, 1330, 1320],
            // 图表类型,这里使用line,为折线图
            type: 'line'
        }]
    };
    myChart.setOption(option);
</script>

在页面内容中主要包含三部分:

  • ``中通过<script>标签引入ECharts的组件JS,这里使用了bootcss的免费公共cdn。如果用于自己生产环境,不建议使用这类免费CDN的JS或者CSS等静态资源。可以从官网下载所需的静态内容,放到Spring Boot的静态资源位置(如果不知道在哪,可见上一篇),或是放到自己公司的静态资源管理的服务器上,实现动静分离。
  • <body>中定义了一个id为main的<div>标签,这个标签后续将用来渲染EChart组件
  • 最后的一段<script>内容则是具体的EChart图标的展现初始化和配置。具体配置内容可见代码中的注释信息。

第五步:启动应用,访问localhost:8080,如果上面操作均无差错,那我们就会得到类似下面的折线图:

file

关于ECharts图表的调试,官方还提供了一个在线工具,有兴趣的读者可以点击这里尝试一下。

file

更多本系列免费教程连载「点击进入汇总目录」

代码示例

本文的相关例子可以查看下面仓库中的chapter4-2目录:

附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读/书籍书单大全:

(点击右侧 即可打开个人博客内有干货):技术干货小栈
=====>>①【Java大牛带你入门到进阶之路】<<====
=====>>②【算法数据结构+acm大牛带你入门到进阶之路】<<===
=====>>③【数据库大牛带你入门到进阶之路】<<=====
=====>>④【Web前端大牛带你入门到进阶之路】<<====
=====>>⑤【机器学习和python大牛带你入门到进阶之路】<<====
=====>>⑥【架构师大牛带你入门到进阶之路】<<=====
=====>>⑦【C++大牛带你入门到进阶之路】<<====
=====>>⑧【ios大牛带你入门到进阶之路】<<====
=====>>⑨【Web安全大牛带你入门到进阶之路】<<=====
=====>>⑩【Linux和操作系统大牛带你入门到进阶之路】<<=====

天下没有不劳而获的果实,望各位年轻的朋友,想学技术的朋友,在决心扎入技术道路的路上披荆斩棘,把书弄懂了,再去敲代码,把原理弄懂了,再去实践,将会带给你的人生,你的工作,你的未来一个美梦。

以下是对您提出的技术栈的详细介绍,并提供一些示例代码和解释。 --- ### **前端技术栈:Vue 3 + JavaScript + Element Plus + ECharts** #### Vue 3 Vue 3 是 Vue.js 的最新版本,引入了许多新特性,例如组合式 API (Composition API)、响应式系统改进等。以下是使用 Vue 3 创建一个简单的计数器组件的示例: ```vue <template> <div> <p>当前计数: {{ count }}</p> <button @click="increment">增加</button> </div> </template> <script> import { ref } from 'vue'; export default { setup() { const count = ref(0); // 使用 ref 创建响应式变量 const increment = () => { count.value++; // 修改响应式变量的值 }; return { count, increment }; // 返回需要在模板中使用的变量和方法 }, }; </script> ``` **解释**: - `ref` 用于创建一个响应式变量。 - `setup` 函数是 Vue 3 中 Composition API 的入口点,所有逻辑都在这里定义。 - 模板中的 `{{ count }}` 动态绑定数据,按钮点击时调用 `increment` 方法更新计数。 --- #### Element Plus Element Plus 是基于 Vue 3 的 UI 组件库,提供了丰富的组件来快速构建界面。以下是一个使用 Element Plus 表单组件的示例: ```vue <template> <el-form :model="form" label-width="100px"> <el-form-item label="用户名"> <el-input v-model="form.username"></el-input> </el-form-item> <el-form-item label="密码"> <el-input v-model="form.password" type="password"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> <script> export default { data() { return { form: { username: '', password: '', }, }; }, methods: { submitForm() { console.log('表单数据:', this.form); }, }, }; </script> ``` **解释**: - `el-form` 和 `el-form-item` 是 Element Plus 提供的表单组件。 - `v-model` 实现了双向绑定,用户输入会自动更新到 `form` 对象中。 - 点击提交按钮时,触发 `submitForm` 方法打印表单数据。 --- #### ECharts ECharts 是一个强大的图表库,支持多种图表类型。以下是一个使用 ECharts 绘制柱状图的示例: ```vue <template> <div ref="chart" style="width: 600px; height: 400px;"></div> </template> <script> import * as echarts from 'echarts'; export default { mounted() { this.initChart(); }, methods: { initChart() { const chart = echarts.init(this.$refs.chart); // 初始化图表 const option = { title: { text: '销售数据', }, tooltip: {}, xAxis: { type: 'category', data: ['一月', '二月', '三月', '四月'], }, yAxis: { type: 'value', }, series: [ { data: [120, 200, 150, 80], type: 'bar', }, ], }; chart.setOption(option); // 设置图表配置 }, }, }; </script> ``` **解释**: - `echarts.init` 方法初始化图表容器。 - 配置项 `option` 定义了图表的标题、X 轴、Y 轴和数据。 - `chart.setOption` 将配置应用到图表中。 --- ### **后端技术栈:Spring Boot 2.7.x + Spring Data JPA + Spring Security + JWT** #### Spring Boot 2.7.x Spring Boot 是一个用于快速开发 Java 应用的框架。以下是一个简单的 RESTful API 示例: ```java @RestController @RequestMapping("/api") public class UserController { @Autowired private UserService userService; @GetMapping("/users") public List<User> getAllUsers() { return userService.getAllUsers(); // 获取所有用户 } @PostMapping("/users") public User createUser(@RequestBody User user) { return userService.createUser(user); // 创建新用户 } } ``` **解释**: - `@RestController` 标注该类为控制器。 - `@RequestMapping` 定义请求路径前缀。 - `@GetMapping` 和 `@PostMapping` 分别处理 GET 和 POST 请求。 - `@RequestBody` 用于将请求体中的 JSON 数据映射为对象。 --- #### Spring Data JPA Spring Data JPA 提供了对数据库操作的支持。以下是一个简单的实体类和 Repository 接口示例: ```java // 实体类 @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // Getters and Setters } // Repository 接口 public interface UserRepository extends JpaRepository<User, Long> { Optional<User> findByEmail(String email); } ``` **解释**: - `@Entity` 标注该类为 JPA 实体。 - `@Id` 和 `@GeneratedValue` 定义主键生成策略。 - `JpaRepository` 提供了基本的 CRUD 操作,`findByEmail` 是自定义查询方法。 --- #### Spring Security + JWT Spring Security 用于保护应用程序的安全性,JWT(JSON Web Token)用于实现无状态认证。以下是一个简单的 JWT 验证流程: ```java // 过滤器类 public class JwtFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { final String authHeader = request.getHeader("Authorization"); if (authHeader == null || !authHeader.startsWith("Bearer ")) { chain.doFilter(request, response); return; } final String jwt = authHeader.substring(7); try { Claims claims = Jwts.parser().setSigningKey("secretkey").parseClaimsJws(jwt).getBody(); request.setAttribute("userId", claims.getSubject()); } catch (Exception e) { // 处理无效令牌 } chain.doFilter(request, response); } } ``` **解释**: - `JwtFilter` 是一个自定义过滤器,用于解析和验证 JWT。 - 如果请求头中包含有效的 `Bearer` 令牌,则提取用户 ID 并设置到请求属性中。 - 如果令牌无效或缺失,则继续过滤链。 --- ### **数据存储:MySQL 8.0** MySQL 是一种关系型数据库管理系统,常用于存储和管理结构化数据。以下是一个简单的 SQL 查询示例: ```sql -- 创建用户表 CREATE TABLE users ( id BIGINT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) UNIQUE NOT NULL ); -- 插入数据 INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com'); -- 查询数据 SELECT * FROM users WHERE email = 'alice@example.com'; ``` **解释**: - `CREATE TABLE` 语句定义了一个包含 `id`、`name` 和 `email` 字段的表。 - `INSERT INTO` 插入一条记录。 - `SELECT` 查询特定用户的记录。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值