echarts从数据库动态获取数据实现饼图和柱状图(Springboot)

创建数据库,自己随便插入一些数据。
CREATE TABLE `sign` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `num` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_unicode_ci;

1.主控制器,用于访问view.html

package com.zq.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MainController {

    @RequestMapping("/view")
    public String myView(){
        return "view.html";
    }


}
2.控制器用于访问SignService层的getSign方法
package com.zq.controller;


import com.zq.pojo.Sign;
import com.zq.service.SignService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

@RestController
public class SignController {

    @Resource
    SignService signService;

    @RequestMapping("/s")
    public List<Sign> getSign(){
        return signService.getSign();

    }
}
3.接口定义getSign方法
package com.zq.service;

import com.zq.pojo.Sign;
import java.util.List;

public interface SignService {

    List<Sign> getSign();
}
4.接口的实现,调用dao层的mapper
package com.zq.service;

import com.zq.dao.SignMapper;
import com.zq.pojo.Sign;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author qimeng
 */
@Service
public class SignServiceImpl implements SignService{


    /**
     * @author qimeng
     */

        @Resource
        SignMapper signMapper;

        @Override
        public List<Sign> getSign() {
            return signMapper.getSign();
        }


    }
5.mapper查询数据库内容
package com.zq.dao;

import com.zq.pojo.Sign;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * @author qimeng
 */
@Mapper
public interface SignMapper {

    @Select("select * from sign")
    List<Sign> getSign();
}
6.index.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>打卡人数可视化</title>
    <script src="js/echarts.min.js"></script>
    <script src="js/jquery-3.6.0.min.js"></script>
</head>

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

<script type="text/javascript">
    //初始化echarts
    function init(myChart){
        let option = {
            title:{
                text:'ECharts 数据统计'
            },
            series:[{
                name:'访问量',
                type:'pie',
                radius:'50%',
                data:[
                    {value:0,name:'无'},
                ]
            }]
        };

        myChart.setOption(option);
    }

    //从数据库读取数据赋值给echarts
    function show(myChart){
        $.ajax({
            contentType : "application/json",
            type : "GET",
            url : "s",
            dataType : "json",
            success : function(data) {
                //创建一个数组,
                let Chart=[];
                for(let i=0;i<data.length;i++){
                    let obj={};
                    obj.name=data[i].name;
                    obj.value=data[i].num;
                    Chart[i]=obj;
                }

                myChart.setOption({
                    title:{
                        text:'打卡人数数据统计'
                    },
                    tooltip:{},
                    series:[{
                        name:'访问量',
                        type:'pie',
                         // radius:'10%',
                        data:Chart,
                    }]

                });

            }
        });
    }

    //初始化echarts实例
    let myChart = echarts.init(document.getElementById("main"));
    init(myChart);
    show(myChart);

</script>
</html>
7.view.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>打卡人数可视化</title>
    <script src="js/echarts.min.js"></script>
    <script src="js/jquery-3.6.0.min.js"></script>
</head>

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

<script type="text/javascript">
    var myChart = echarts.init(document.getElementById('main'));

    $.ajax({
        contentType: "application/json",
        type: "GET",
        url: "s",
        dataType: "json",
        success: function (data) {

            let x = [];
            let y = [];

            for (let i = 0; i < data.length; i++) {
            //x[i]获取json的姓名,y[i]获取json的值
                x[i] = data[i].name;
                y[i] = data[i].num;


            }

            myChart.setOption({

                tooltip: {},
                label: {
                    show: true,
                    position:'top',
                },
                legend: {},
                xAxis: {
                    data: x
                },
                yAxis: {},
                series: [
                    {
                        colorBy:'data',
                        name: '打卡次数',
                        type: 'bar',
                        data: y

                    }
                ]
            });

        },
        error: function () {

        }
    })

</script>
</html>
8.运行结果(index.html)

在这里插入图片描述

9.view.html

在这里插入图片描述

  • 12
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现echarts数据库动态获取数据的功能,可以通过以下步骤进行操作: 1. 创建一个包含饼图的HTML页面。可以使用Echarts官方提供的CDN链接引入echarts库。 2. 在页面中创建一个包含饼图的div元素,指定一个唯一的id,用于将图表渲染到该div中。 3. 编写JavaScript代码。首先,使用ajax或fetch等方法向后端发送请求,获取数据库中的数据。可以使用XMLHttpRequest对象或是现代的Fetch API。 4. 在请求成功的回调函数中,将获取到的数据进行处理,以符合echarts饼图指定的数据格式。通常需要将数据转换为一个数组,数组中每个元素包含name和value属性,分别表示饼图的每一块的名称和数值。 5. 创建echarts实例,并配置饼图的相关参数。可以设置饼图的标题、图例、颜色等样式。 6. 将处理后的数据传入到echarts实例中,通过setOption方法设置饼图数据。 7. 最后,调用echarts实例的方法将图表渲染到指定的div元素中。 示例代码如下: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Echarts饼图动态获取数据示例</title> <!-- 引入Echarts库 --> <script src="https://cdn.staticfile.org/echarts/5.0.0/echarts.min.js"></script> </head> <body> <div id="pieChart" style="width: 600px; height: 400px;"></div> </body> <script> // 使用ajax请求后端数据 var xhr = new XMLHttpRequest(); xhr.open("GET", "后端API地址", true); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { var data = JSON.parse(xhr.responseText); // 数据处理 var pieData = []; for (var i = 0; i < data.length; i++) { var item = {}; item.name = data[i].name; item.value = data[i].value; pieData.push(item); } // 创建echarts实例 var pieChart = echarts.init(document.getElementById("pieChart")); // 配置饼图参数 var option = { title: { text: '动态获取数据饼图示例' }, series: [{ type: 'pie', data: pieData }] }; // 设置饼图数据 pieChart.setOption(option); } } xhr.send(); </script> </html> ``` 需要注意的是,示例代码仅给出了基本的动态获取数据并展示饼图的逻辑。具体的后端API地址、数据处理逻辑以及样式调整等,需要根据实际情况进行适配和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值