마이페이지에 추가 기능을 만들고, 관리자용 페이지를 만들었음. 통계 페이지 만드는 게 제법 재밌었음 ㅎㅎ 기능이 많으면 어드민을 따로 만드는 게 나을 듯한데 세미프로젝트에서는 어떻게 할 지 고민됨
session에서 loginId, loginGrade를 계속 조회하므로 constant 패키지에 SessionConstant 인터페이스를 생성해 상수화를 진행함
인터페이스는 원래 다중 상속용 클래스라 객체를 생성할 수 없고, 상수만 만들 수 있으므로 public static final 키워드를 생략함
앞으로 SessionConstant.ID
와 같은 형태로 호출 가능
//세션에서 자주 사용하는 값들의 이름을 보관
public interface SessionConstant {
String ID = "loginId";
String GRADE = "loginGrade";
}
지금까지 백엔드에서 쓴 “loginID”를 모두 상수로 변경함
프로젝트 전체 범위에 대해 찾기를 하려면 Ctrl+H
> File Search에서 검색어를 입력
SQL 구문에 GROUP BY 써서 통계를 내는 기능들을 추가할 수 있음
(아래 코드 예시: 포켓몬 등록 현황 조회)
포켓몬 테이블에 번호 / 이름 / 타입을 등록할 수 있음. 포켓몬 등록 현황 페이지에서 타입별 포켓몬 수를 조회하려고 함. DB에서 type과 cnt 컬럼만으로 이루어진 테이블을 조회할 예정이므로 VO에 변수 type과 cnt 선언
//PocketMonsterCountVO.java
통계 조회용 함수 추가
List<PocketMonsterCountVO> selectCountList();
위에서 생성한 VO에 대한 RowMapper와 통계 조회용 함수 구현
//PocketMonsterDaoImpl.java
//PocketMonsterCountVo에 대한 RowMapper
private RowMapper<PocketMonsterCountVO> countMapper = (rs, idx) -> {
PocketMonsterCountVO vo = new PocketMonsterCountVO();
vo.setType(rs.getString("type"));
vo.setCnt(rs.getInt("cnt"));
return vo;
};
//Count 조회
@Override
public List<PocketMonsterCountVO> selectCountList() {
String sql = "select type, count(*) cnt "
+ "from pocket_monster group by type";
return jdbcTemplate.query(sql, countMapper);
}
컨트롤러에서 model에 조회 결과 리스트를 첨부하고, 해당 모델을 jsp에서 반복문을 이용해 출력
varStatus를 사용하면 반복문의 상태를 알 수 있음
<table border="1" width="300">
<thead>
<tr>
<th>순위</th>
<th>속성</th>
<th>개체 수</th>
</tr>
</thead>
<tbody align="center">
<c:forEach var="vo" items="${list}" varStatus="status">
<tr>
<td>${status.count}</td>
<td>${vo.type}</td>
<td>${vo.cnt}</td>
</tr>
</c:forEach>
</tbody>
</table>