본문 바로가기
Project/소경관

[소경관] : MongoDB에서 원하는 Collection 명만 가져와서 View에 List로 뿌려주기

by 오주현 2022. 5. 27.
반응형
<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가 출력된다.

 


반응형

댓글