You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring Boot后台仪表盘展示统计数值?代码实现求助

解决Spring Boot仪表盘统计数值获取问题

要获取总用户数、总分类数这类统计值,你可以通过EntityManager执行JPQL统计查询,然后将结果赋值到DashboardInfo对象中。具体实现如下:

1. 完善DashboardInfo类

首先要给DashboardInfo添加对应的getter和setter方法,否则控制器无法将数据传递到前端页面:

public class DashboardInfo {
    private long totalUsers;
    private long totalCategories;
    private long totalBrands;

    // Getters and Setters
    public long getTotalUsers() {
        return totalUsers;
    }

    public void setTotalUsers(long totalUsers) {
        this.totalUsers = totalUsers;
    }

    public long getTotalCategories() {
        return totalCategories;
    }

    public void setTotalCategories(long totalCategories) {
        this.totalCategories = totalCategories;
    }

    public long getTotalBrands() {
        return totalBrands;
    }

    public void setTotalBrands(long totalBrands) {
        this.totalBrands = totalBrands;
    }
}

2. 实现DashboardService的统计逻辑

在loadSummary方法中,针对每个统计项编写对应的JPQL查询,通过Query.getSingleResult()获取统计结果,转换为Long类型后设置到DashboardInfo对象:

@Service
public class DashboardService {

    @Autowired
    private EntityManager entityManager;
    
    public DashboardInfo loadSummary() {
        DashboardInfo summary = new DashboardInfo();
        
        // 获取总用户数
        Query userQuery = entityManager.createQuery("SELECT COUNT(DISTINCT u.id) FROM User u");
        Long totalUsers = (Long) userQuery.getSingleResult();
        summary.setTotalUsers(totalUsers);
        
        // 获取总分类数
        Query categoryQuery = entityManager.createQuery("SELECT COUNT(DISTINCT c.id) FROM Category c");
        Long totalCategories = (Long) categoryQuery.getSingleResult();
        summary.setTotalCategories(totalCategories);
        
        // 获取总品牌数
        Query brandQuery = entityManager.createQuery("SELECT COUNT(DISTINCT b.id) FROM Brand b");
        Long totalBrands = (Long) brandQuery.getSingleResult();
        summary.setTotalBrands(totalBrands);
        
        return summary;
    }
}

3. 前端页面取值(补充说明)

在你的模板页面(比如Thymeleaf的index.html)中,直接通过表达式获取统计值即可,示例:

<div class="stat-card">
    <h4>总用户数</h4>
    <span>${summary.totalUsers}</span>
</div>
<div class="stat-card">
    <h4>总分类数</h4>
    <span>${summary.totalCategories}</span>
</div>
<div class="stat-card">
    <h4>总品牌数</h4>
    <span>${summary.totalBrands}</span>
</div>

注意事项

  • 确保JPQL中的实体类名(User、Category、Brand)和你的实际实体类名称完全一致,区分大小写。
  • 如果实体的主键字段不是id,需要替换为对应的主键字段名。
  • getSingleResult()会返回唯一统计结果,即使查询无数据也会返回0,无需额外处理空值。

内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:01:06