VO에 MAP넣기

서현서현·2022년 8월 29일
0

Spring

목록 보기
24/31

내가 하려는것

이 화면에 들어갈 데이터들을 모두 쿼리로 가져와서 차트에 뿌려주는것!
차트에 뿌리기위해 데이터들을 가져오는 쿼리를 작성했다.
그런데 문제는 찜과 리뷰같은건 딱 int나 String데이터지만 인기메뉴나 일별 방문인원같은건 여러개의 묶음인 데이터가 여러개 있는 형태... 그니까 List<VO>같은 형태다
그냥 list로도 할라면 하겠지만....

[PopularVO(
franId=null, stDate=null, enDate=null, wishCnt=0, reviewCnt=0, 

menuName=치킨텐더 샐러드, sumQty=7, 
menuMap=null, morderDate=null, allPcnt=0, allPcntMap=null, resvDate=null, resvPcnt=0, resvPcntmap=null), 

PopularVO(franId=null, stDate=null, enDate=null, wishCnt=0, reviewCnt=0, 
menuName=달링 포인트 스트립, sumQty=5, menuMap=null, morderDate=null, allPcnt=0, allPcntMap=null, 
resvDate=null, resvPcnt=0, resvPcntmap=null), 

PopularVO(franId=null, stDate=null, enDate=null, wishCnt=0, reviewCnt=0, menuName=갈릭 립아이, sumQty=5, 
menuMap=null, morderDate=null, allPcnt=0, allPcntMap=null, resvDate=null, resvPcnt=0, resvPcntmap=null), 

PopularVO(franId=null, stDate=null, enDate=null, wishCnt=0, reviewCnt=0, menuName=퀸즈랜드 립아이, 
sumQty=5, menuMap=null, morderDate=null, allPcnt=0, allPcntMap=null, resvDate=null, resvPcnt=0, resvPcntmap=null), 

PopularVO(franId=null, stDate=null, enDate=null, wishCnt=0, reviewCnt=0, menuName=멜티드 치즈, sumQty=1, 
menuMap=null, morderDate=null, allPcnt=0, allPcntMap=null, resvDate=null, resvPcnt=0, resvPcntmap=null)]

VO가 아래상태와 같기 때문에 list의 상태가 영... 가독성이 좋지않다..ㅎㅎ;;


@Data
@Alias("PopularVO")
public class PopularVO {
	
	// 검색조건
	private String franId;
	private String stDate;
	private String enDate;
	
	//찜 갯수
	private int wishCnt;
	
	// 리뷰누적갯수
	private int reviewCnt;
	
	// 메뉴별 판매량
	private String menuName;
	private int sumQty;
	
	// 전체 방문인원(일별)
	private String morderDate;
	private int allPcnt;
	
	// 예약 방문 인원(일별)
	private String resvDate;
	private int resvPcnt;

}

VO 를 다 쪼갤까 하다가 너무 정신없어서 그냥 관련된거 다 묶어놨다. vo하나에 싹다 세팅해서 넘겨버리고싶어서.... 혀튼 그럼 판매량, 인원같은건 map처럼 예를들어 스테이크=3개, 일요일=10명 이런식으로 들어와야 한다. 그래서 저 세가지 데이터는 MAP으로 가져오고 싶었다.

그래서 MyBatis에서 resultMap="HashMap" 이런 방식을 찾아봤으나 그닥 와닿는게 없었다. 키값을 내가 정해주지 않고 데이터끼리 묶어주고싶은데말야...

이런저런 고민끝에 그냥 일단 코드 짜면서 방식을 찾아봤다!

그냥 List로 쿼리결과를 발생시킨 뒤 그 데이터를 Map으로 변환해 VO에 넣기로 결정!

따라서 VO에 map이 생겨야한다

	// 메뉴별 판매량
	private String menuName;
	private int sumQty;
	Map<String, Integer> menuMap;
	
	// 전체 방문인원(일별)
	private String morderDate;
	private int allPcnt;
	Map<String, Integer> allPcntMap;
	
	// 예약 방문 인원(일별)
	private String resvDate;
	private int resvPcnt;
	Map<String, Integer> resvPcntmap;

이렇게 추가해줬고

sql은 그냥 List안에 vo를 담아서 필요한 데이터들을 각자 불러왔다. 그리고 그 리스트들을 돌면서 map을 생성해주면 됨^-^

		List<PopularVO> menulist = dao.getMenuCnt(vo);
		Map<String, Integer> tempMap = new HashMap<>();
		for(PopularVO menu : menulist) {
			tempMap.put(menu.getMenuName(),menu.getSumQty());
		}
		vo.setMenuMap(tempMap);


		List<PopularVO> allPcntlist = dao.getAllPcntCnt(vo);
		Map<String, Integer> temp2Map = new HashMap<>();
		for(PopularVO pcnt : allPcntlist) {
			temp2Map.put(pcnt.getMorderDate(),pcnt.getAllPcnt());
		}
		vo.setAllPcntMap(temp2Map);

		List<PopularVO> resvPcntlist = dao.getResvPcntCnt(vo);
		Map<String, Integer> temp3Map = new HashMap<>();
		for(PopularVO resv : resvPcntlist) {
			temp3Map.put(resv.getResvDate(),resv.getResvPcnt());
		}
		vo.setResvPcntmap(temp3Map);

그러면 결과를 콘솔에 찍어보면 VO 하나에 모든 데이터가 들어오는걸 볼 수 있다

PopularVO(franId=CB2022901, stDate=2022/08/01, enDate=2022/09/01, wishCnt=1, reviewCnt=0, menuName=null, sumQty=0, 
menuMap={치킨텐더 샐러드=7, 퀸즈랜드 립아이=5, 달링 포인트 스트립=5, 갈릭 립아이=5, 멜티드 치즈=1}, 
morderDate=null, allPcnt=0, 
allPcntMap={2022-08-31=15, 2022-08-30=9}, resvDate=null, resvPcnt=0, 
resvPcntmap={2022-08-31=15, 2022-08-30=9, 2022-08-27=2, 2022-08-25=2})

null이거나 0인애들은 파라미터 용도로 쓴거라서 그런것!
위의 list로 불러왔을때의 데이터보다 훨씬 가독성이 좋아졌다ㅎㅎ

0개의 댓글