Project/소경관
[소경관] : MongoDB에서 원하는 Collection 명만 가져와서 View에 List로 뿌려주기
오주현
2022. 5. 27. 22:07
반응형
<form>
<table class="table table-striped">
<tr>
<th scope="col">저장 목록</th>
</tr>
<tr th:each="m :${viewCarDTOList}">
<td th:text="${m.checkCollectionName}"></td>
</tr>
</table>
</form>
View에서는 데이터를 가져와서 뿌려주는 작업만 한다.
나중에 추가하면 클릭해서 상세 보는 것도 추가해야 하지만 일단은 이렇다.
public interface ICheckMapper {
// 완료 항목 보기
List<ViewCarDTO> viewCheck() throws Exception;
}
인터페이스에서 정의해주고 오버라이딩해서 사용한다.
@Override
public List<ViewCarDTO> viewCheck() throws Exception {
List<ViewCarDTO> viewCarDTOList = new LinkedList<>();
for (String colNm : mongo.getCollectionNames()) {
if (colNm == null) {
colNm = new String();
}
if (colNm.length() > 5) {
ViewCarDTO viewCarDTO = new ViewCarDTO();
viewCarDTO.setCheckCollectionName(colNm);
viewCarDTOList.add(viewCarDTO);
}
}
return viewCarDTOList;
}
List로 사용하고 MongoDB의 CollectionName을 가져와서 길이가 5이상인 컬렉션만 담아주었다. 다른 좋은 방법이 있을 수도 있는데 데이터 베이스에서 간단하게 길이 5이상 데이터만 필요했기 때문에 저렇게 넣어줬다.
그 다음은 DTO에 담고 리스트에 저장하고 리턴했다.
public interface ICheckService {
// 완료 항목 보여주기
List<ViewCarDTO> viewCheck() throws Exception;
}
인터페이스를 정의한다.
@Override
public List<ViewCarDTO> viewCheck() throws Exception {
List<ViewCarDTO> viewCarDTOList = null;
viewCarDTOList = iCheckMapper.viewCheck();
if (viewCarDTOList == null) {
viewCarDTOList = new LinkedList<>();
}
return viewCarDTOList;
}
null 처리 간단하게 해주고 Mapper에서 가져온 값을 Controller로 넘겨준다.
// 완료 항목 보기
@GetMapping("/viewCheck")
public String viewCheck(Model model) throws Exception {
List<ViewCarDTO> viewCarDTOList = iCheckService.viewCheck();
model.addAttribute(viewCarDTOList);
return "carCheck/viewCheck";
}
컨트롤러에서 Model 객체를 생성해주고 그 안에 담아 View로 넘겨준다. 그럼 맨 위에 View에서 thymeleaf의 each문을 통해 반복해서 list가 출력된다.
반응형