프로젝트

7. 공지사항 게시판 (글 등록, 게시글 목록)

하차모 2023. 5. 18. 19:52

게시글 등록

<insert id="regNotice">
		INSERT INTO BOARD (
			BOARD_NUM
			, BOARD_TITLE
			, BOARD_CONTENT
			, BOARD_WRITER
			, BOARD_MENU_CODE
			<if test="isImportant != null">
			, IS_IMPORTANT
			</if>
		) VALUES (
			(SELECT 'BOARD_'||LPAD(NVL(MAX(TO_NUMBER(SUBSTR(BOARD_NUM, 7))), 0) + 1, 3, '0')
		    FROM BOARD)
			, #{boardTitle}
			, #{boardContent}
			, 20230517
			, 'BOARD_MENU_001'
			<if test="isImportant != null">
			, #{isImportant}
			</if>
		)
	</insert>

제목, 내용, 중요글 체크박스 input 태그

작성자는 아직 로그인 기능 구현 전이라 임의로 넣어줌

메뉴코드도 input 태그 hidden으로 넣어줄 예정

중요글 체크박스가 체크되지 않았을때는 쿼리 실행되지 않게 if문 삽입함 (DB에서 IS_IMPORTANT 컬럼은 DEFAULT 값 ‘N’으로 바꿈)

(같은 맥락으로 IS_PRIVATE 컬럼 DEFAULT 값도 ‘N’으로 바꿈)

비밀글 같이 다른 컬럼도 if문 넣어서 동적 쿼리로 모든 게시판 글 등록을 이 쿼리로 쓸지, 각 게시판마다 다른 쿼리 쓰는게 좋을지는 첨부파일 기능까지 구현하고 다시 생각해보자

조회수는 0, 상태값은 1(등록), 비밀글은 ‘N’, 좋아요 개수는 0 값이 디폴트 값으로 들어가는데 공지사항 게시판에는 비밀글이랑 좋아요 기능 안 쓸거임

 

 

 

게시글 목록

<!-- 공지사항 글 목록 조회 -->
	<!-- 상태값 1(등록) --> 
	<select id="getNoticeList" resultMap="board">
		SELECT BOARD_NUM
		    , BOARD_TITLE
		    , BOARD_WRITER
		    , TO_CHAR(BOARD_DATE, 'YYYY-MM-DD HH24:MI') BOARD_DATE
		    , BOARD_VIEW
		    , ENAME
		FROM BOARD, EMP
		WHERE BOARD_MENU_CODE = 'BOARD_MENU_001'
		AND BOARD_STATUS = 1
		AND BOARD_WRITER = EMPNO
		ORDER BY BOARD_NUM DESC
	</select>
	
	<!-- 공지사항 중요글 목록 조회 -->
	<select id="getNoticeImportantList" resultMap="board">
		SELECT BOARD_NUM
			, BOARD_TITLE
			, BOARD_WRITER
			, TO_CHAR(BOARD_DATE, 'YYYY-MM-DD HH24:MI') BOARD_DATE
			, BOARD_VIEW
		  , ENAME
		FROM BOARD, EMP
		WHERE BOARD_MENU_CODE = 'BOARD_MENU_001'
		AND IS_IMPORTANT = 'Y'
		AND BOARD_STATUS = 1
		AND BOARD_WRITER = EMPNO
		ORDER BY BOARD_NUM DESC
	</select>

중요글, 전체글 목록을 따로 조회해서 중요글은 상단에 번호 대신 중요 표시와 함께 띄워줌

작성일은 TO_CHAR로 년월일시분까지.

글 등록할 때 board_writer 컬럼에는 사원 테이블 pk인 사번이 들어가는데, 게시글 목록 작성자 칸에는 사원명이 뜨도록 EMP 테이블 조인해서 사원명 가져옴. boardVO에도 ename 변수 추가함.

 

 

 

고민

게시판은 총 세 개인데 데이터베이스 테이블은 하나로 쓰고 대신 게시판 메뉴 테이블의 메뉴코드를 외래키로 걸어서 각 게시판마다 메뉴코드가 다르게 설계했다.

그러다보니… 메뉴마다 쿼리를 각자 쓰기보다 조회, 글 등록, 수정, 삭제 등 기능이 같으면 같은 쿼리를 쓰고 싶은데 메뉴코드 다루는 게 쉽지 않다.