๋ชฉ์ฐจ
DB์์ ํต๊ณ ์ฟผ๋ฆฌ ์คํ ํ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด๋จ์์ ์ฐจํธ๋ก ํ์ํ๋ ๊ฐ๋จํ ์์
xml
SELECT DATE_FORMAT(FRST_REG_DT, '%M') AS cond /*์กฐ๊ฑด*/
, COUNT(RVW_RSLT_CD) AS totalCnt /*์ ์ฒด*/
, COUNT(CASE WHEN RSLT_CD = '10' THEN 1 END) AS passedCnt /*์ฐฌ์ฑ*/
, COUNT(CASE WHEN RSLT_CD = '20' THEN 1 END) AS rejectedCnt /*๊ฑฐ์ */
FROM BOARD
GROUP BY DATE_FORMAT(FRST_REG_DT, '%Y-%m')
ORDER BY DATE_FORMAT(FRST_REG_DT, '%Y-%m')
service
public Map<String, Object> selectStatus(StatsSearchVO searchVO) {
Map<String, Object> resultMap = new HashMap<>();
//์๋ณธ ๋ฐ์ดํฐ
List<StatsVO> statsList = new ArrayList<>();
statsList = statsMapper.selectStatus(searchVO);
String jsonData = "";
if (statsList != null && statsList.size() > 0) {
//json ๋ฌธ์์ด๋ก ๋ณํ
jsonData = new Gson().toJson(statsList);
}
resultMap.put("resultList", statsList);
resultMap.put("resultJsonData", jsonData);
return resultMap;
}
controller
@RestContorller, @ResponseBody.. ๋ฑ ๋ฌด์จ ๋ฐฉ๋ฒ์ด๋ json๋ฌธ์์ด๋ก ํ๋ฉด์ผ๋ก ๋๊ธฐ๋ฉด ๋๋ค.
public ModelAndView selectStatus(ModelMap model, @ModelAttribute("searchVO")StatsSearchVO searchVO) {
ModelAndView mav = new ModelAndView();
mav.setViewName("jsonView");
mav.addObject("resultMap", statsService.selectStatus(searchVO));
return mav;
}
ํ๋ฉด๋จ
ํ๋ฉด๋จ์์ ํ์ด์ง ๋ก๋ ํ ์๋ ํจ์ ํธ์ถ
function initChart(jsonData) {
// ๋ผ๋ฒจ, ๋ฐ์ดํฐ(์ฐฌ์ฑ, ๊ฑฐ์ )
var labels = [];
var passedCntList = [];
var rejectedCntList = [];
//์๋ฒ์์ ๋ฐ์ jsonData๊ฐ ์์ ๋๋ง
if (jsonData) {
var jData = JSON.parse(jsonData);
for (var i = 0; i < jData.length; i++) {
var data = jData[i];
labels.push(data.cond);
passedCntList.push(data.passedCnt);
rejectedCntList.push(data.rejectedCnt);
}
}
//์บ๋ฒ์ค ์์ญ
var ctx = document.getElementById('chart1').getContext('2d');
var config = {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: '์ฐฌ์ฑ',
backgroundColor: 'rgba(54, 162, 235, 0.5)',
borderWidth: 0,
data: passedCntList,
},
{
label: '๊ฑฐ์ ',
backgroundColor: 'rgba(255, 99, 132, 0.5)',
borderWidth: 0,
data: rejectedCntList,
}]
},
options: {
scales: {
y: {
beginAtZero: true,
ticks: {
stepSize: 20 // y์ถ ๊ฐ๊ฒฉ์ 20์ผ๋ก ์ค์
}
}
}
}
}
//๊ธฐ์กด ์ฐจํธ ํ๊ดด(์ด๊ฑฐ ์ํ๋ฉด chat.js์์ ์๋ฌ ๋ฐ์)
//Uncaught Error: Canvas is already in use. Chart with ID '0' must be destroyed before the canvas with ID.... ์ด๋ฐ..์๋ฌ
if (chart) {
chart.destroy();
}
//์บ๋ฒ์ค ์ฌ์ด์ฆ ์ด๊ธฐํ
var canvas = document.getElementById('chart1');
canvas.width = 600;
canvas.height = 200;
//์ฐจํธ ๊ฐ์ฒด ์์ฑ
chart = new Chart(ctx, config);
}
๊ฒฐ๊ณผ(์์)
'IT > development' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[mybatis] mybatis data binding (feat. vo) (24) | 2024.03.17 |
---|---|
[JavaScript] ๋ค์ค select ์์(feat. ์ง์ญ์ฝ๋) (31) | 2024.03.01 |
[mybatis] ๋์ ์ฟผ๋ฆฌ ์ง๊ณ ์ฟผ๋ฆฌ ์์ (38) | 2024.02.25 |
[tiles] UnknownHostException: tiles.apache.org ์๋ฌ (48) | 2024.02.06 |
[spring] jUnit test ์ vm ์ต์ ์ ๋ฌ (feat. maven) (64) | 2024.01.21 |
๋๊ธ