개발자

DB 카테고리 계층 구조 JSP에서 사이드바로 표출?

2024년 03월 25일조회 126

유동적인 사이드 메뉴 바를 설계하고자 합니다. 그래서 db에 카테고리 계층 구조를 closure table를 통해 설계했습니다. 아래 사진과 같이 category 테이블과 clo_table(클로저 테이블) 를 통해 계층 구조를 설게했습니다. 이를 가지고 JSP 뷰단에서 계층구조 형태로 사이드바를 구현하고자 하는데 도무지 감이 안잡히네요. 현재 db 환경은 mysql이고, spring project에서 mybatis를 통해 쿼리 작성하고 있습니다. 도움을 주시면 감사하겠습니다. (꾸벅꾸벅)

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 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 정도의 데이터를 구현할수 있을것 같습니다. 참고로 메뉴가 동적으로는 되지만 메뉴 순서는 어렵겠네요.

ccat님의 프로필 사진

스프링 데이터베이스 시큐리티 리액트 컴포넌트 스테이트 이런 구조를 보시는거면 간단하게 생각해서 메인메뉴 , 소메뉴가 있다고 생각하시고 idx name ancestor descendant 1 스프링 1 0 2 시큐리티 1 1 3 DB 1 2 3 리액트 2 0 4 컴포넌트 2 1 5 스테이트 2 2 이런식으로 짠 후에 반복문을 통해서 descendant 가 0 일때 는 메인메뉴로 두시고 나머지 1이상부터는 소메뉴로 두시고 하심 될 것 같아요

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 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) 모델을 고려해 보시는 것도 좋습니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!