Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

STAY POSITIVE!

[Spring Boot] Chartjs를 이용해 JSON데이터 그래프로 구현하기 (연습) 본문

개발꿈나무/스프링(Spring)

[Spring Boot] Chartjs를 이용해 JSON데이터 그래프로 구현하기 (연습)

익명의담비 2018. 12. 10. 17:45


궁극적으로 하고 싶은 것은 일간, 주간, 월간 단위의 매출 현황을 그래프로 구현하는 거였다. 그래서 우선 데이터를 그래프로 구현하는 연습부터 해보기로 했다. 구글링해보니 Chart.js를 많이 사용하고 있었다. 늘 하듯이 스프링 부트로 MyBatis를 이용할 것이다.


http://uashadow.tistory.com/9 <-이 포스팅이 굉장히 많은 도움이 되었다.




1. 연습용 프로젝트를 하나 만들어주고, mybatis 세팅까지 완료.


- pom.xml 에 gson 메이븐 라이브러리도 추가하기


<dependency>

            <groupId>com.google.code.gson</groupId>

            <artifactId>gson</artifactId>

            <version>2.8.5</version>

        </dependency> 



2. 패키지, 클래스, 인터페이스 생성

- controller : IncomeController

- domain : IncomeVO

- mapper : IncomeMapper

- service : IncomeService(인터페이스), IncomeServiceImpl(클래스)


3. src/main/resources

- mapper 폴더 생성 : IncomeMapper.xml 

- templates : dateIncome.html





(1) IncomeVO



@Data

public class IncomeVO {


private int dd;

private int income;

}


(2) IncomeController


import java.util.List;

import java.util.Locale;


import org.gorany.domain.IncomeVO;

import org.gorany.service.IncomeService;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.ResponseBody;


import com.google.gson.Gson;


import lombok.Setter;

import lombok.extern.java.Log;


@Controller

@Log

public class IncomeController {

private static final Logger logger = LoggerFactory.getLogger(IncomeController.class);


@Setter(onMethod_=@Autowired)

private IncomeService service;

@RequestMapping(value = "dateIncome", method = RequestMethod.GET)

public String dateIncome(Locale locale, Model model) {

return "dateIncome";

}

@RequestMapping(value = "incomeList", method = RequestMethod.GET, produces="text/plain;charset=UTF-8")

public @ResponseBody String incomeList(Locale locale, Model model) {

Gson gson = new Gson();

List<IncomeVO> list = service.getIncome();

return gson.toJson(list);

}


}


(3) IncomeMapper.xml


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper

  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

 <mapper namespace="org.******.mapper.IncomeMapper">

 

  <select id="getIncome" resultType="org.******.domain.IncomeVO">

  select * from date_income

  </select>

 

 

 </mapper> 



(4) IncomeMapper / IncomeService / IncomeServiceImpl


 

public interface IncomeMapper {


public List<IncomeVO> getIncome();

}



 public interface IncomeService {

public List<IncomeVO> getIncome();


}



@Service

@Log

public class IncomeServiceImpl implements IncomeService {

@Setter(onMethod_=@Autowired)

private IncomeMapper mapper;

@Override

public List<IncomeVO> getIncome() {

return mapper.getIncome();

}



}





그래프 구현 : dateIncome.html


- chart.js 와 jquery 사용할 준비


<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org">

<meta charset="utf-8">

<head>

</head>

<body>


<script

src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<script

src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.js"></script>


</body>

</html>


- 그래프 띄울 <div> 만들기


<div style="width:60%">

<div>

<canvas id="canvas" height="450" width="600"></canvas>

</div>

</div> 


- 자바스크립트로 구현


<script>

var chartLabels = [];

var chartData = [];


$.getJSON("http://localhost:8080/incomeList", function(data){

$.each(data, function(inx, obj){

chartLabels.push(obj.dd);

chartData.push(obj.income);

});

createChart();

console.log("create Chart")

});


var lineChartData = {

labels : chartLabels,

datasets : [

{

label : "Date Income",

fillColor : "rbga(151,187,205,0.2)",

strokeColor : "rbga(151,187,205,1)",

pointColor : "rbga(151,187,205,1)",

pointStrokeColor : "#fff",

pointHighlightFill : "#fff",

pointHighlightStroke : "rbga(151,187,205,1)",

data : chartData

}

]

}


function createChart(){

var ctx = document.getElementById("canvas").getContext("2d");

LineChartDemo = Chart.Line(ctx,{

data : lineChartData,

options :{

scales : {

yAxes : [{

ticks :{

beginAtZero : true

}

}]

}

}

})


}


</script>








구현된 화면