1.引入对应的js文件 highchars.js
2.创建一个jsp页面,里面就是有关于我们图标的设计
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
< html>
< head>
< base href = " ${BaseContext}" >
< title> 展示视频播放次数图表</ title>
<%--第一步引入highCharts文件--%>
<%--BaseContext 路径 http://localhost:8080/day74_video/--%>
< link rel = " stylesheet" href = " static/css/bootstrap.min.css" >
< script src = " static/js/highcharts.js" > </ script>
</ head>
< body>
< jsp: include page = " ../header.jsp" >
< jsp: param name = " state" value = " fromJsp" />
</ jsp: include>
<%--第二步: 准备一个HighCharts DOM容器--%>
< div class = " container" >
< div class = " jumbotron" >
< h2> 统计 - 统计分析</ h2>
</ div>
< div class = " row" >
< div id = " container" style =" min-width : 400px; height : 400px" > </ div>
</ div>
< div class = " row" >
< button onclick = " ajaxLoadData();" > ajax加载图表</ button>
< div id = " ajaxContainer" style =" min-width : 400px; height : 400px" > </ div>
</ div>
</ div>
< script>
var options = {
chart: {
type: 'column'
} ,
title: {
text: "课程平均播放次数"
} ,
subtitle: {
text: "数据来源:zhiyou100.com"
} ,
xAxis: {
categories: ${ xData} ,
crosshair: true
} ,
yAxis: {
min: 0 ,
title: {
text: '平均播放次数(times)'
}
} ,
tooltip: {
headerFormat: '<span style="font-size:10px">{point.key}</span><table>' ,
pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
'<td style="padding:0"><b>{point.y:.1f} mm</b></td></tr>' ,
footerFormat: '</table>' ,
shared: true ,
useHTML: true
} ,
plotOptions: {
column: {
pointPadding: 0.2 ,
borderWidth: 0
}
} ,
series: [ {
name: '平均播放次数' ,
data: ${ yData}
} ]
}
var chart = Highcharts. chart ( 'container' , options) ;
</ script>
</ body>
</ html>
3.创建controller层,当我们点击统计的时候就跳转到这一层来,我们在这里面要注意一下我们需要把查询出来的数据存在map集合里面,才能实现一个下标对以一个数据,不至于出现混乱,然后再用两个集合来获得map集合2中的key值后value值,这里面就使用到了stringBuffer的append方法目的是追加子字符串,因为jsp页面那边需要的是一个包含所有数据的字符串,最后通过model.Aturibute方法把我们的存到model域之中,最后通过返回把我们数据传输到我们的jsp页面里面
@Controller
@RequestMapping ( "/admin/state" )
public class StateController {
@Autowired
private VideoService videoService;
@RequestMapping ( "/courseavg.do" )
public String courseAvg ( Model model) {
List< HashMap> list = videoService. queryVideoPlayTimes ( ) ;
System. out. println ( "统计结果为: " + list) ;
ArrayList< Object> xList = new ArrayList < > ( ) ;
ArrayList< Object> yList = new ArrayList < > ( ) ;
for ( HashMap map : list) {
xList. add ( map. get ( "course_name" ) . toString ( ) ) ;
yList. add ( Integer. parseInt ( map. get ( "avgTimes" ) . toString ( ) ) ) ;
}
StringBuffer xData = new StringBuffer ( ) ;
StringBuffer yData = new StringBuffer ( ) ;
xData. append ( "[" ) ;
yData. append ( "[" ) ;
for ( int i = 0 ; i < xList. size ( ) ; i++ ) {
if ( i == 0 ) {
xData. append ( "'" + xList. get ( i) + "'" ) ;
yData. append ( "" + yList. get ( i) + "" ) ;
} else {
xData. append ( ",'" + xList. get ( i) + "'" ) ;
yData. append ( "," + yList. get ( i) + "" ) ;
}
}
xData. append ( "]" ) ;
yData. append ( "]" ) ;
System. out. println ( xData) ;
System. out. println ( yData) ;
model. addAttribute ( "xData" , xData) ;
model. addAttribute ( "yData" , yData) ;
return "admin/analysis/show" ;
}
}
4.创建swervice 以及serviceImpl mapper以及Mapper的接口,目的是形成一个结构框架,
public interface VideoService {
List< HashMap> queryVideoPlayTimes ( ) ;
}
@Service
public class VideoServiceImpl implements VideoService {
@Autowired
private VideoMapper mapper;
@Override
public List< HashMap> queryVideoPlayTimes ( ) {
return mapper. queryVideoPlayTimes ( ) ;
}
}
public interface VideoMapper {
List< HashMap> queryVideoPlayTimes ( ) ;
}
mapper接口由于mybatyis框架的缘故并不是使用实现类来完成的,而是使用mapper.xml配置文件来实现的
< mapper namespace = " com.zhiyou.video.mapper.VideoMapper" >
< select id = " queryVideoPlayTimes" resultType = " java.util.HashMap" >
select course_id,course_name,round(avg(v.video_play_times)) as avgTimes from video v,course c where v.course_id = c.id
group by v.course_id,c.course_name
</ select>
</ mapper>
总结:这个数据库数据主要实现原理;就是通过js页面的Alax,来完成页面的设计,我们最终只需要把我们数据库的数据分开来,按照页面指定的变量,把我们的数据传输就去就可以了…多多熟悉几遍就好了