Console 오류
Mapped Statement 에서 Statement는 mybatis sql쿼리문의 id값
ex) session.selectList("getMonthData", vo); 에서
"getMonthData" => Statement
bean을 못찾는다는 오류
=> Controller에서 url매핑값이 중복되진 않았는지 확인!
BroadCastMapper => DAO
package kr.smhrd.mapper;
import java.util.ArrayList;
import org.apache.ibatis.annotations.Select;
import kr.smhrd.entity.BroadCast;
// @Mapper => 버전 업그레이드로 생략 가능
public interface BroadCastMapper {
// 남, 여, 전체 시청률 평균을 조회하는 기능
// 조회한 결과 행이 하나이기 때문에 BroadCast로 받아오기
// session.selectOne();
public BroadCast select();
// 월별 데이터 조회
public ArrayList<BroadCast> getMonthData();
// 연령대별 데이터 조회
public BroadCast getSData();
// 출연진 TOP5 조회
@Select("SELECT FIXING_CAST_NM, CAST_NM FROM BROADCAST WHERE PROGRAM_NM = '뮤직뱅크'")
public ArrayList<BroadCast> getCastCount();
}
BroadCastRestController
package kr.smhrd.controller;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashSet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import kr.smhrd.entity.BroadCast;
import kr.smhrd.entity.CastCount;
import kr.smhrd.mapper.BroadCastMapper;
@RestController // @Controller + @ResponseBody
public class BroadCastRESTController {
// -> 비동기통신 요청을 처리해주는 Controller
// -> 웹페이지 화면에 데이터를 돌려주는 역할
// -> 메소드를 선언할 때 @ResponseBody 생략이 가능
@Autowired
private BroadCastMapper mapper;
// 월별 데이터 조회할 수 있는 url
@RequestMapping("/getMonthData")
public ArrayList<BroadCast> getMonthData() {
System.out.println("요청이 들어오닝");
ArrayList<BroadCast> result = mapper.getMonthData();
return result;
}
// 연령대별 데이터 조회
@RequestMapping("/getSData")
public BroadCast getSData() {
System.out.println("요청");
BroadCast result = mapper.getSData();
return result;
}
// 출연진 Top5 조회
@RequestMapping("/getCastCount")
public ArrayList<CastCount> getCastCount() {
// 1. DB에서 데이터 조회
ArrayList<BroadCast> result = mapper.getCastCount();
// 2. 조회한 결과값 화면에 출력될 수 있는 형태로 변환
// 1개의 column안에 여러 명의 이름이 들어있음
// 연예인 이름을 전부 담을 수 있는 ArrayList<String>
ArrayList<String> cast_nm = new ArrayList<String>();
for (BroadCast b : result) {
// 2-1) result안에 들어있는 MC이름을 가져와서 ','를 기준으로 쪼개기
String[] temp1 = b.getFixing_cast_nm().split(",");
// 2-2) result안에 들어있는 cast_nm을 가져와서 ,를 기준으로 쪼개기
String[] temp2 = b.getCast_nm().split(",");
// 2-3) 쪼갠 데이터들을 하나의 공간에 보관하기
for (String s : temp1) {
cast_nm.add(s);
}
for (String s : temp2) {
cast_nm.add(s);
}
}
System.out.println(cast_nm);
// 2-4) 전체 연예인 명단에서 중복을 제거
// Collection => 객체 자료구조들 (ArrayList, List, HashMap ...)
// HashSet => 중복값을 허용하지 않는 자료구조 => 데이터를 꺼내려면 iterator 사용해야함
// LinkedHashSet => 순서가 있는 중복값을 허용하지 않는 자료구조
LinkedHashSet<String> castingHashSet = new LinkedHashSet<String>(cast_nm);
System.out.println("중복제거한 결과값 >> "+castingHashSet);
// 2-5) 최종적으로 리턴해줄 자료형
// CastCount => 이름 : 횟수
ArrayList<CastCount> resultList = new ArrayList<CastCount>();
for(String c:castingHashSet) {
if(!c.equals("")) {
// 2-6) 연예인 이름 당 몇 번 등장했는지 횟수를 카운트
// Collections.frequency(객체를 담고있는 컬렉션, 개수를 세고 싶은 객체)
int count = Collections.frequency(cast_nm, c);
// 2-7) 결과값은 resultList에 담아주기
resultList.add(new CastCount(c, count));
}
}
// 2-8) resultList
// => 객체를 정렬 => count 기준으로 정렬
// 객체를 정렬하는 방법
// (1) 정렬하고 싶은 객체가 Comparable 인터페이스를 상속
// (2) Comparator라는 인터페이스를 구현 ★사용★
// 익명함수 방법 1.
// Collections.sort(resultList, new Comparator<CastCount>() {
//
// // compare => 비교하는 함수
// @Override
// public int compare(CastCount o1, CastCount o2) {
// return o2.getCount() - o1.getCount();
// // 양수 => 내림차순 정렬
// // 음수 => 오름차순 정렬
// }
// });
// 익명함수 방법 2. 람다식 표현
// => 익명함수를 호출할 때 많이 사용하는 방식(한줄로 간단히 표현할 수 있는 경우만 사용가능)
// 사용법 : (매개변수) -> 리턴해줘야하는 결과값
Collections.sort(resultList, (o1, o2)->o2.getCount()-o1.getCount());
System.out.println("최종결과 >> "+ resultList);
return resultList;
}
}
index.jsp
변환과정 : jsp --> .java --> .class --> .html
<!-- Content Row -->
<div class="row">
<!-- Content Column -->
<div class="col-lg-6 mb-4">
<!-- Project Card Example -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">출연진 TOP5</h6>
</div>
<div class="card-body" id="top5">
</div>
</div>
</div>
</div>
</div>
<!-- /.container-fluid -->
<script >
$(function(){
$.ajax({
url : 'getCastCount',
dataType : 'json',
success : function(res){
console.log(res);
console.log(res[0].name);
// DOM -> Document Object Model
// 1. id값이 top5인 태그를 가져오기
// document.getElementByID('top5')
// == document.querySelector('#top5')
// == $('#top5')
// jquery, 순수js => 요소(태그)를 조작하는 메소드들 공부!!
// 2. 태그에 추가하기
for(let i = 0; i<5; i++){
$('#top5').append(
`<h4 class="small font-weight-bold">
\${res[i].name} <span class="float-right">\${res[i].count}번</span>
</h4>
<div class="progress mb-4">
<div class="progress-bar bg-danger" role="progressbar" style="width: \${res[i].count}%"
aria-valuenow="\${res[i].count}" aria-valuemin="0" aria-valuemax="100"></div>
</div>`)
}
},
error : function(){
console.log('실패!');
}
})
})
</script>
'프레임워크(Framework) > Spring' 카테고리의 다른 글
name값은 동일한데 value가 여러 개 들어가있을 경우 (1) | 2023.06.14 |
---|---|
동적 쿼리 + JS 변수로 ajax 데이터 보내기 (0) | 2023.06.13 |
DB에 저장된 데이터값을 ajax로 그래프 그리기 (1) | 2023.06.08 |
DB에 저장된 데이터 불러오기 (0) | 2023.06.08 |
mysql 연결&데이터 불러오기 (0) | 2023.06.07 |
댓글