본문 바로가기
Java

Spring - Java 로 게시판 구글차트(chart.js) 기능 만들기

by 나는 코딩왕 2021. 2. 5.
  • 스프링에서의 게시판 데이터에 대한 구글 차트 기능을 만들어보았습니다

 

 

 

1. 날짜에 대한 게시물 갯수를 통해 차트로 표현하고자 쿼리를 작성하였습니다.

	   SELECT 
	  		COUNT(*)AS COUNT
	  		,TO_CHAR(REG_DATE,'YYYY-MM-DD') AS REG_DATE
	   FROM 
 	  		SJ_HUEBOARD
 	   WHERE 
 	    	REG_DATE 
 	   BETWEEN 
 	   		'20200901' 
 	   AND 
 	   		'2021-10-10' 
 	   GROUP BY 
 	   		 TO_CHAR(REG_DATE,'YYYY-MM-DD');
 	   		 

 

 

2. Java 단에서 리스트를 map에 담아 json형식으로 넘기기

@RequestMapping("/ajaxchart.do")
@ResponseBody
public String deletecontent(HttpServletRequest request,AboardDTO dto) {
	List<ChartDTO> list = dao.chart();
	request.setAttribute("list", list);
	HashMap map = new HashMap();
	map.put("list",list);
	String json = null;
	try {
		json = new ObjectMapper().writeValueAsString(map);
	} catch (JsonProcessingException e) {
		e.printStackTrace();
	}
				
		return json;
	}

 

 

3. Jsp 화면단에서 표현하기

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ include file = "/WEB-INF/views/member/huationMain.jsp" %>
<!DOCTYPE html>

<html>



<title>chartJS</title>

<body>

<style>
	#chart-container {
		float: right;
		position: center;
		left: -50;
	}
	canvas {
	    float: right;
	    width: 40%;
	    position: right;
	    left: -30%;
	}
</style>

			<h1>게시물데이터그래프화</h1>
			
			
				<canvas id="myChart" align="center"></canvas>
				<canvas id="myChart2"></canvas>
				<canvas id="myChart3"></canvas>
				<canvas id="myChart4"></canvas>
			
		
	
	
	<script src="https://code.jquery.com/jquery-3.4.1.js"></script>
	<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.3/dist/Chart.min.js"></script>
	<script>
    	//차트 색상 랜덤
		$(function() {
			function randomColor(labels) {
				var colors = [];
				for (let i = 0; i < labels.length; i++) {
					colors.push("#" + Math.round(Math.random() * 0xffffff).toString(16));
				}
				return colors;
			}
			function makeChart(ctx, type, labels, data) {
				var myChart = new Chart(ctx, {
				    type: type,
				    data: {
				        labels: labels,
				        datasets: [{
				            label: '날짜별 게시글 등록 수',
				            data: data,
				            backgroundColor: randomColor(labels)
				        }]
				    },
				    options: {
					    responsive: false,
				        scales: {
				            yAxes: [{
				                ticks: {
				                    beginAtZero: true
				                }
				            }]
				        }
				    }
				});
			}
			
			$.ajax({
				
				type: "GET",
				url: "ajaxchart.do",
				dataType : "json",
				success: function(data, status, xhr) {
					
					console.log(data);
					
					
					var labels = [];
					var myData = [];
					
					//맵안에 list 였으니 for문으로 돌린다
					$.each(data.list,function (k,v){
						
						labels.push(v.reg_date);
						myData.push(v.count);
					});

					var newLabels = labels.slice(-5);
					var newMyData = myData.slice(-5);
					// Chart.js 막대그래프 그리기
					var ctx = $('#myChart');
					makeChart(ctx, 'bar', newLabels, newMyData);
					// Chart.js 선그래프 그리기
					ctx = $('#myChart2');
					makeChart(ctx, 'line', newLabels, newMyData);
					// Chart.js 원그래프 그리기
					ctx = $('#myChart3');
					makeChart(ctx, 'pie', newLabels, newMyData);
					ctx = $('#myChart4');
					makeChart(ctx, 'doughnut', newLabels, newMyData);
				}
			});
			
		});
	</script>



</body>
</html>

 

댓글