개발자
유동적인 사이드 메뉴 바를 설계하고자 합니다. 그래서 db에 카테고리 계층 구조를 closure table를 통해 설계했습니다. 아래 사진과 같이 category 테이블과 clo_table(클로저 테이블) 를 통해 계층 구조를 설게했습니다. 이를 가지고 JSP 뷰단에서 계층구조 형태로 사이드바를 구현하고자 하는데 도무지 감이 안잡히네요. 현재 db 환경은 mysql이고, spring project에서 mybatis를 통해 쿼리 작성하고 있습니다. 도움을 주시면 감사하겠습니다. (꾸벅꾸벅)
답변 2
혹시 한번에 조회할 필요가 없다면 둘다 전체 select 한뒤 tree구조를 만들면되지않을까 싶네요. Node를 8개 + RootNode 1개를 만든뒤 일반 Node는 Map<Int, Node> 의 map 저장한뒤 RootNode의 childList에 일반노드를 모두 다 넣고 ancestor descendant를 보시고 서로 다른케이스에 대해서 해당 방식처럼 수행하면될것 같습니다. 5번 row 1,4,1 map.get(1).addChild(map.get(4)) rootNode.removeChilde(map.get(4)) 7번 row 1,5,1 map.get(1).addChild(map.get(5)) rootNode.removeChilde(map.get(5)) 9번 row 2,6,1 map.get(2).addChild(map.get(6)) rootNode.removeChilde(map.get(6)) 11번 row 2,7,1 map.get(2).addChild(map.get(7)) rootNode.removeChilde(map.get(7)) 13번 row 3,8,1 map.get(3).addChild(map.get(8)) rootNode.removeChilde(map.get(8)) 결과 rootNode -1 --4 --5 -2 --6 -3 --8 -7 위와 같이 나오게 되며 별 이상이 없으면 하위 depth들도 마찬가지로 조작이 될것 같습니다. rootNode의 자식들만 뽑아다가 메뉴 만드시면 될듯 싶습니다. Node는 적절한 class를 구현하시면 될것같습니다. idx, name, childs 정도의 데이터를 구현할수 있을것 같습니다. 참고로 메뉴가 동적으로는 되지만 메뉴 순서는 어렵겠네요.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 03월 25일
먼저 DB에서 계층구조 데이터를 가져오는 예시 SQL 쿼리를 제공하겠습니다. 이 쿼리는 'root'로부터 시작하는 트리 구조의 모든 데이터를 가져옵니다. ```sql SELECT a.parent, a.child, b.name FROM clo_table AS a JOIN category AS b ON a.child = b.id WHERE a.parent = (SELECT id FROM category WHERE name = 'root') ``` 그런 다음, 이 결과를 사용하여 생성된 DTO 또는 도메인 객체 목록을 JSP에 전달합니다. Spring Controller에서는 아래와 같이 처리됩니다: ```java @RequestMapping(value = "/your_path", method = RequestMethod.GET) public String yourMethod(Model model) { List<Category> categories = yourService.getCategories(); model.addAttribute("categories", categories); return "your_view"; } ``` 그런 다음 JSP에서 이 데이터는 일반적으로 다음과 같이 표현됩니다: ```jsp <ul> <c:forEach items="${categories}" var="category"> <li>${category.name}</li> </c:forEach> </ul> ``` 위의 코드 조각은 단순화된 예제일뿐입니다. 실제 필요한 복잡성에 따라 재귀적으로 뷰를 생성해야 하는 경우가 있을 수 있습니다. 이 경우 custom 태그 또는 JSP 2.0 태그 파일을 고려해 볼 수 있습니다. 참고로 클로저 테이블은 hierarchies(계층)을 저장하고 쿼리하는 데 매우 효율적인 방식이지만, 데이터를 일관되게 유지하는 것은 복잡할 수 있습니다. 가능한 경우 간단한 계층 구조에 대해서는 경로 열거(Path Enumeration) 또는 중첩 세트(Nested Set) 모델을 고려해 보시는 것도 좋습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!