前言
前面的文章我们已经介绍了如何获取沪深300成分股所述行业以及权重的数据,想要了解这部分内容的小伙伴可以阅读上一篇文章
springboot+jdbcTemplate+sqlite编程示例——以沪深300成分股数据处理为例-CSDN博客
那么有了上文获取的数据,我们实际上可以计算一下沪深300按照行业分布的权重占比数据,最后的成果如下所示
是不是效果还挺酷的,下面就来介绍一下技术细节。
后端技术细节
首先来讲一下后端的技术细节,其实后端需要做的就是从表中获取按行业区分的权重数据,我们先来看一下数据表
数据表中包含了所述行业和权重占比,那么思路就很明确了,我们只需要查出所有的行业,然后按照行业统计权重之和就行了。
我们的实体类非常简单,就是所属行业和对应的权重
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CSI300DistVO {
private String industry;
private Double weight;
}
接着就是使用JdbcTemplate将数据查出来
public List<CSI300DistVO> queryDist() {
// 首先查询所有的行业
String sql = "SELECT DISTINCT industry FROM "+ tableName;
List<String> industrys = jdbcTemplate.queryForList(sql, String.class);
// 查询每个行业的权重和
List<CSI300DistVO> csi300DistVOList = new ArrayList<>();
for(int i=0; i<industrys.size(); i++) {
sql = "SELECT SUM(weight) FROM " + tableName +
" WHERE industry=?";
Object[] params = new Object[] {
industrys.get(i),
};
Double weight = jdbcTemplate.queryForObject(sql, params,Double.class);
// 保留四位小数
String tmp = String.format("%.4f", weight);
weight = Double.parseDouble(tmp);
CSI300DistVO entity = new CSI300DistVO(industrys.get(i), weight);
csi300DistVOList.add(entity);
log.info(entity.toString());
}
return csi300DistVOList;
}
然后通过get请求提供查询服务
@RequestMapping("/queryDist")