댓글가능게시판
유형1: MVC형태
View > Controller > Service (비즈니스로직) > DB
유형2: 무슨형태??
Controller(View 역할 포함) > Service > DB
Column
글번호(number), 부모글번호(number), 글제목(varchar2),
작성자명(varchar2), 작성일자(Data), 비밀번호(varchar2), 조회수(number)
| 글번호 | 부모글번호 | 글제목 | 작성자명 | 작성일자 | 비밀번호 | 조회수 | |
| 원글 | 1 | null | |||||
| 원글 | 2 | null | |||||
| 1번글의답글 | 3 | 1 | |||||
| 2번글의답글 | 4 | 2 | |||||
| 1번글의답글 | 5 | 1 | |||||
| 5번글의답글 | 6 | 5 |
글번호 컬럼에는 시퀀스 필요
만약 글번호: 1 이고 부모글번호: 0 이면 원래글로 판단,
글번호가 3이고 부모글번호가1이면 3번글은 1번글에 대한 답글
글번호가 4이고 부모글번호가2이면 2번글의 대한 답글
글번호가 5이고 부모글번호가 1이면 1번글에 대한 답글
글번호가 6이고 부모글번호가 5이면 5번글에 대한 답글 ( 1번글 답글에 대한 답글)
CREATE TABLE repboard(
board_no number, // 글번호
parent_no number, // 부모글번호
board_title varchar2(30), // 제목
board_writer varchar2(15), // 작성자명
board_dt date, // 작성일자
board_pwd varchar2(4), // 글 비밀번호
board_cnt number(5), // 조회수
constraint repboard_no_pk PRIMARY KEY(board_no) // 글번호를 pk로 설정
);
샘플데이터
INSERT INTO repboard (board_no, parent_no, board_title, board_writer, board_dt, BOARD_PWD, board_cnt)
VALUES (1, 0, '글1', NULL, '21/03/01', '1234', 0);
INSERT INTO repboard(board_no, parent_no, board_title, board_writer, board_dt, BOARD_PWD, board_cnt)
VALUES (2, 0, '글2', '이씨', '21/03/02', '1234', 0);
INSERT INTO repboard(board_no, parent_no, board_title, board_writer, board_dt, BOARD_PWD, board_cnt)
VALUES (3, 2, '글3-답글2', '김씨', '21/03/03', '1234', 0);
INSERT INTO repboard(board_no, parent_no, board_title, board_writer, board_dt, BOARD_PWD, board_cnt)
VALUES (4, 2, '글4-답글2', '강씨', '21/03/04', '1234', 0);
INSERT INTO repboard(board_no, parent_no, board_title, board_writer, board_dt, BOARD_PWD, board_cnt)
VALUES (5, 3, '글5-답글3', '신씨', '21/03/05', '1234', 0);
.
.
.
댓글구현을 위해 오라클 계층형 쿼리를 사용해보자
원글인지 답글인지에 따라 글의 순서를 정의할 수 있는 계층형쿼리 쿼리 사용법
level1: 원글, level2: 원글의 답글, level3: 답글의 답글
SELECT [컬럼]
FROM [테이블]
WHERE [조건]
START WITH [최상위 조건]
CONNECT BY [NOCYCLE] [PRIOR 계층형 구조 조건];
parnet_no = 0 이면 원글
START WITH parent_no = 0 (level1로 보여줄 조건)
SELECT board_no
FROM repboard
START WITH parent_no = 0
CONNECT BY PRIOR board_no = parent_no; // 현재행의 부모글번호와 같은 값을 갖는 board_no(글번호)행을 찾는다.

-----------------------------------------------------------------------------------------------------------------------------------
추가로 글번호(board_no)순으로 내림차순 정렬이 필요
동일레벨의 행들간에는 최신순으로 정렬
원글 들 중 최신글이 먼저 위치하고, 답글들 중에서도 최신글이 윗 부분에 위치하게 만들어야 한다
같은 레벨을 뜻하는 것이 SIBLINGS(계층형 쿼리에서 사용)


원글은 1번글과 2번글. 2번글이 최신글이므로 1번글보다 위에 위치한다.
4번글과 3번글은 2번글의 답글, 4번답글이 3번답글보다 최신글이므로 상대적으로 위에 위치한다.
5번글은 3번글의 답글
------------------------------------------------------------------------------------------------------------


> 글번호 자동생성을 위한 SEQUENCE 생성
DROP SEQUENCE board_seq;
CREATE SEQUENCE board_seq START WITH 11;
(START WITH 11 이므로 글번호는 11번부터 자동생성된다)
이클립스에서 프로젝트를 생성해보자. Dynamic web project 생성

boardmvc 프로젝트 생성 시작 (Dynamic web module version 3.0으로 생성, 기존에는 2.5로 했었는데) 3.0부터는 web.xml 필요하지 않습니다. 톰캣 서버에서 제공되는 최신 다이나믹 웹 모듈 버전이 현재 4.0 (2021년 3월기준)



<sevlet>
</servlet>
<servlet-mapping>
</servlet-mapping>
이렇게 2.5버전에서 web.xml에서 설정해야 했던 부분은 3.0이상부터는 어노테이션으로 대체 가능
src > package 만들기 > 패키지이름은 control > servlet만들기 BoardListServlet




3.0버전이므로 web.xml에서 설정하지 않고 어노테이션으로 설정. @webServlet("/list") 이렇게 servlet 위에 어노테이션이 설정되어있다.

@WebServlet 어노테이션은 클래스 위에 선언되는 어노테이션
메인페이지 생성


'자바웹개발' 카테고리의 다른 글
| 스타벅스 화면 구성 (0) | 2023.09.17 |
|---|---|
| 톰캣 설치 및 web 프론트엔드 구현 (0) | 2023.09.17 |
| 테이블 설계 (0) | 2023.09.16 |