VUE+Echarts+SpringBoot:后端获取数据库中的值传给前端图表展示

一、后端部分

由于逻辑比较简单,没有写service层。

数据库中的数据和最后的结果如下所示:

项目框架如下用到下面四个文件

1.实体类Echarts

package com.example.analysis.bean;

public class Echarts{
    private Integer id;
    private String name;
    private Integer num;

    public Echarts(String name, Integer num) {
        this.name = name;
        this.num = num;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }

    @Override
    public String toString() {
        return "Echarts{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", num=" + num +
                '}';
    }
}

2.controller层:EchartsController

package com.example.analysis.controller;
import com.alibaba.fastjson.JSON;
import com.example.analysis.bean.Disease;
import com.example.analysis.bean.Echarts;
import com.example.analysis.dao.EchartsDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

@RestController
public class EchartsController {

    @Autowired
    private EchartsDao echartsDao;
    @RequestMapping("/echarts")
    public String getEcharts(){

        List<Echarts> echarts = echartsDao.getAllEcharts();
        //System.out.println(echarts);

        HashMap<String, Object> res = new HashMap<>();
        List<String> name = new ArrayList<>();
        List<Integer> num = new ArrayList<>();

        for( int i = 0; i < echarts.size(); i++ ){
            name.add(echarts.get(i).getName());
            num.add(echarts.get(i).getNum());
        }
        res.put("name",name);
        res.put("num",num);
        System.out.println(res);
        String res_string = JSON.toJSONString(res);
        return res_string;

    }
}

3.dao层

package com.example.analysis.dao;
import com.example.analysis.bean.Echarts;
import com.example.analysis.bean.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface EchartsDao {
    public List<Echarts> getAllEcharts();
}

4.mapper层

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.analysis.dao.EchartsDao">
    <select id="getAllEcharts" resultType="com.example.analysis.bean.Echarts">
        SELECT name,num FROM echarts
    </select>
</mapper>

二、前端部分:Vue+Echarts显示图表

这部分花费了非常多的时间,看了网上超级多的博客,感觉写的都不好,这里建议先看下echarts的使用方式以后,获取到后台传来的数据后在看。

<template>
    <div id="app">
        <div id="main" style="width:600px;height:400px"></div>
    </div>
</template>
<script>
    import echarts from "echarts";
    export default {
        name: "App",
        created() {
            this.getAllEcharts();
        },
        data() {
            return {
                name: [],
                num: [],
            };
        },
        methods: {
            async getAllEcharts() {
                const {data: res1} = await this.$http.get("echarts");
                console.log(res1);
                this.name = res1.name;
                this.num = res1.num;
                this.setChart();
            },
            setChart() {
                // 基于准备好的dom,初始化echarts实例
                this.chart = echarts.init(document.getElementById('main'))
                // console.log(this.chart)
                // 指定图表的配置项和数据
                var option = {
                    title: {
                        text: "疾病人数分布"
                    },
                    tooltip: {},
                    legend: {
                        data: ["人数"]
                    },
                    xAxis: {
                        data: this.name,
                    },
                    yAxis: {},
                    series: [
                        {
                            name: "人数",
                            type: "bar",
                            data: this.num,
                        }
                    ],
                }
                this.chart.setOption(option);
            },
            mounted() {
                this.$nextTick(function () {
                    this.drawPid("main");
                });
            }
        }
    }
</script>

2.main.js

引入echarts组件,具体echarts的安装方式网上很多,安装即可。

import echarts from "echarts"
Vue.prototype.$echarts = echarts

然后在in.dex里面引入前端映射的路径即可。

  • 15
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
下面是一个使用Spring Boot、MyBatis、Vue、ElementUI和Echarts实现图表显示的示例: 首先,创建数据库表,表名为`fruit`,字段包括`id`、`fruit_name`、`num`和`price`。 在后端(Spring Boot)代码,创建一个Fruit实体类和对应的Mapper接口,用于操作数据库: Fruit.java: ```java public class Fruit { private Integer id; private String fruitName; private Integer num; private Double price; // 省略getter和setter方法 } ``` FruitMapper.java: ```java @Mapper public interface FruitMapper { List<Fruit> getAllFruits(); } ``` 在后端的控制器,编写一个接口用于获取所有水果数据: FruitController.java: ```java @RestController @RequestMapping("/fruits") public class FruitController { @Autowired private FruitMapper fruitMapper; @GetMapping("/") public List<Fruit> getAllFruits() { return fruitMapper.getAllFruits(); } } ``` 在前端Vue)代码,创建一个组件用于显示图表,并在其引入Echarts和ElementUI: Chart.vue: ```vue <template> <div> <el-chart :options="chartOptions" style="height: 400px;"></el-chart> </div> </template> <script> import echarts from 'echarts' import { Chart } from 'element-ui' export default { components: { 'el-chart': Chart }, data() { return { chartOptions: {} } }, mounted() { this.getChartData() }, methods: { getChartData() { // 发送请求获取后端数据 axios.get('/fruits/') .then(response => { const data = response.data // 处理数据,生成Echarts图表配置项 const options = { title: { text: '水果销量图表' }, xAxis: { data: data.map(item => item.fruitName) }, yAxis: {}, series: [ { name: '销量', type: 'bar', data: data.map(item => item.num) } ] } // 更新图表配置项 this.chartOptions = options }) .catch(error => { console.error(error) }) } } } </script> ``` 在Vue的入口文件,注册Chart组件并引入ElementUI的样式: main.js: ```javascript import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' import Chart from './components/Chart.vue' Vue.use(ElementUI) new Vue({ el: '#app', components: { Chart }, template: '<Chart />' }) ``` 最后,在HTML文件添加一个用于显示图表的DOM元素,并引入前端脚本文件: index.html: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Chart Example</title> </head> <body> <div id="app"></div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/element-ui/lib/index.js"></script> <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script> <script src="main.js"></script> </body> </html> ``` 这样,当访问页面时,会从后端获取水果数据,并使用Echarts和ElementUI在图表显示。请根据你的实际需求进行修改。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值