如何在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
相关产品推荐
相关产品推荐

