KSI일기장
0501spring sql log출력, 본문
*sql log출력
CREATE TABLE "BOARD" (
"BOARD_NO" NUMBER NOT NULL,
"BOARD_TITLE" VARCHAR2(150) NOT NULL,
"BOARD_CONTENT" VARCHAR2(4000) NOT NULL,
"CREATE_DT" DATE DEFAULT SYSDATE NOT NULL,
"UPDATE_DT" DATE NOT NULL,
"READ_COUNT" NUMBER DEFAULT 0 NOT NULL,
"BOARD_ST" CHAR(1) DEFAULT 'N' NOT NULL,
"MEMBER_NO" NUMBER NOT NULL,
"BOARD_CD" NUMBER NOT NULL
);
COMMENT ON COLUMN "BOARD"."BOARD_NO" IS '게시글 번호(시퀀스)';
COMMENT ON COLUMN "BOARD"."BOARD_TITLE" IS '게시글 제목';
COMMENT ON COLUMN "BOARD"."BOARD_CONTENT" IS '게시글 내용';
COMMENT ON COLUMN "BOARD"."CREATE_DT" IS '작성일';
COMMENT ON COLUMN "BOARD"."UPDATE_DT" IS '마지막 수정일';
COMMENT ON COLUMN "BOARD"."READ_COUNT" IS '조회수';
COMMENT ON COLUMN "BOARD"."BOARD_ST" IS '게시글 상태(정상N, 삭제Y)';
COMMENT ON COLUMN "BOARD"."MEMBER_NO" IS '작성자 회원 번호';
COMMENT ON COLUMN "BOARD"."BOARD_CD" IS '게시판 코드';
-- BOARD 테이블 제약조건 추가
ALTER TABLE BOARD
ADD PRIMARY KEY(BOARD_NO); -- 제약 조건명 생략(SYS_XXXXX)
ALTER TABLE BOARD
ADD CONSTRAINT "FK_BOARD_CD" -- 제약 조건명 지정
FOREIGN KEY("BOARD_CD") -- BOARD의 BOARD_CODE 컬럼에 FK 지정
REFERENCES "BOARD_TYPE"; -- 참조할 테이블
ALTER TABLE BOARD
ADD CONSTRAINT "CHK_BOARD_ST"
CHECK ("BOARD_ST" IN ('N', 'Y'));
-- UPDATE_DT NULL 허용
ALTER TABLE "BOARD"
MODIFY "UPDATE_DT" NULL;
-- BOARD_NO용 시퀀스
CREATE SEQUENCE SEQ_BOARD_NO;
-- BOARD_TYPE 데이터 삽입
INSERT INTO BOARD_TYPE VALUES(1, '공지사항');
INSERT INTO BOARD_TYPE VALUES(2, '자유 게시판');
INSERT INTO BOARD_TYPE VALUES(3, '질문 게시판');
SELECT * FROM BOARD_TYPE;
SELECT * FROM BOARD;
-- BOARD 테이블 샘플 데이터 삽입(PL/SQL)
BEGIN
FOR I IN 1..500 LOOP
INSERT INTO BOARD
VALUES( SEQ_BOARD_NO.NEXTVAL,
SEQ_BOARD_NO.CURRVAL || '번째 게시글',
SEQ_BOARD_NO.CURRVAL || '번째 게시글 내용 입니다.',
DEFAULT, DEFAULT, DEFAULT, DEFAULT, 1, 3
);
END LOOP;
END;
/
COMMIT;
SELECT * FROM MEMBER;
-- 공지사항 게시판 조회
SELECT COUNT(*) FROM BOARD WHERE BOARD_CD = 1;
-- 자유 게시판 조회
SELECT COUNT(*) FROM BOARD WHERE BOARD_CD = 2;
-- 질문 게시판 조회
SELECT COUNT(*) FROM BOARD WHERE BOARD_CD = 3;
-- 추가해주세요!
-- BOARD 테이블의 MEMBER_NO FK 연결 추가
ALTER TABLE BOARD
ADD CONSTRAINT "FK_BOARD_MEMBER"
FOREIGN KEY("MEMBER_NO")
REFERENCES MEMBER;
-- 게시판 이름 조회
SELECT BOARD_NM FROM BOARD_TYPE
WHERE BOARD_CD = 2;
-- 특정 게시판의 전체 게시글 수 조회
-- (단, 삭제글은 제외)
SELECT COUNT(*) FROM BOARD
WHERE BOARD_ST = 'N'
AND BOARD_CD = 2;
-- 특정 게시판에서 일정한 범위의 목록 조회
-- ROWNUM이라는 가상의 행번호 컬럼은
-- WHERE절에 사용되는 경우 무조건 1부터 적용되야 된다.
SELECT * FROM(
SELECT ROWNUM RNUM , A.* FROM(
SELECT BOARD_NO, BOARD_TITLE, MEMBER_NICK,
TO_CHAR( CREATE_DT, 'YYYY-MM-DD' ) AS CREATE_DT,
READ_COUNT
FROM BOARD
JOIN MEMBER USING(MEMBER_NO)
WHERE BOARD_CD = 1
AND BOARD_ST = 'N'
ORDER BY BOARD_NO DESC
) A
)
WHERE RNUM BETWEEN 11 AND 20;
SELECT * FROM ALL_CONSTRAINTS
WHERE TABLE_NAME = 'BOARD_IMG';
-- 게시판 이미지 테이블 생성
CREATE TABLE BOARD_IMG(
IMG_NO NUMBER PRIMARY KEY,
IMG_RENAME VARCHAR2(500) NOT NULL,
IMG_ORIGINAL VARCHAR2(500) NOT NULL,
IMG_LEVEL NUMBER NOT NULL,
BOARD_NO NUMBER REFERENCES BOARD
);
COMMENT ON COLUMN BOARD_IMG.IMG_NO IS '이미지 번호';
COMMENT ON COLUMN BOARD_IMG.IMG_RENAME IS '이미지 저장 경로 + 변경명';
COMMENT ON COLUMN BOARD_IMG.IMG_ORIGINAL IS '이미지 원본명';
COMMENT ON COLUMN BOARD_IMG.IMG_LEVEL IS '이미지 위치 지정 번호';
COMMENT ON COLUMN BOARD_IMG.BOARD_NO IS '게시글 번호';
-- 이미지 번호 시퀀스 생성
CREATE SEQUENCE SEQ_IMG_NO NOCACHE;
DELETE FROM BOARD
WHERE MEMBER_NO != 1;
ALTER TABLE BOARD_IMG
DROP CONSTRAINT SYS_C007148;
-- 제약조건 추가 (BOARD -> MEMBER_S)
ALTER TABLE BOARD
ADD CONSTRAINT FK_BOARD_MEMBER_S
FOREIGN KEY(MEMBER_NO)
REFERENCES MEMBER_S
ON DELETE SET NULL;
-- 제약조건 추가 (BOARD -> MEMBER_S)
ALTER TABLE BOARD_IMG
ADD CONSTRAINT FK_BOARD_BOARD_IMG
FOREIGN KEY(BOARD_NO)
REFERENCES BOARD
ON DELETE SET NULL;
DELETE FROM BOARD_IMG
WHERE BOARD_NO NOT IN(
SELECT BOARD_NO FROM BOARD
);
-- BOARD 테이블 샘플데이터
INSERT INTO BOARD VALUES(
SEQ_BOARD_NO.NEXTVAL, '스프링 테스트', '테스트 내용 입니다.',
DEFAULT, DEFAULT, DEFAULT, DEFAULT, 1, 1
);
-- 이미지 샘플 데이터
INSERT INTO BOARD_IMG VALUES(SEQ_IMG_NO.NEXTVAL, '/resources/images/board/sample1.jpg', 'sample1.jpg', 0, SEQ_BOARD_NO.CURRVAL);
INSERT INTO BOARD_IMG VALUES(SEQ_IMG_NO.NEXTVAL, '/resources/images/board/sample2.jpg', 'sample1.jpg', 1, SEQ_BOARD_NO.CURRVAL);
INSERT INTO BOARD_IMG VALUES(SEQ_IMG_NO.NEXTVAL, '/resources/images/board/sample3.jpg', 'sample1.jpg', 2, SEQ_BOARD_NO.CURRVAL);
INSERT INTO BOARD_IMG VALUES(SEQ_IMG_NO.NEXTVAL, '/resources/images/board/sample4.jpg', 'sample1.jpg', 3, SEQ_BOARD_NO.CURRVAL);
INSERT INTO BOARD_IMG VALUES(SEQ_IMG_NO.NEXTVAL, '/resources/images/board/sample5.jpg', 'sample1.jpg', 4, SEQ_BOARD_NO.CURRVAL);
commit;
ALTER TABLE BOARD_IMG
DROP CONSTRAINT SYS_C007148;
![](https://blog.kakaocdn.net/dn/HaaLv/btsdgS3BAMT/ggdaO2IWIwZe1JEy0VahGk/img.png)
쿼리스트링 = 검색 or 옵션 넣을 때 사용
-> /board/list?type=1
/board/list/1 -> 요청
인터셉터 : 컨트롤러와 dispatcher servlet 사이에서 가로채서 더 해서 돌려준다
요청(request) ------------------------------------------------------------------------> 컨트롤러
filter -> dispatcher Servlet -> interceptor
<------------------------------------------------------------------------
filter (요청만 가능, 응답X)
전처리 perHandle
후처리 postHandle
-HandleInterceptor
package edu.kh.comm.common.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class BoardTypeInterceptor implements HandlerInterceptor {
/*인터셉터가 요청을 가로채는 시기
* 1.preHandle(전처리) :컨트롤러 수행 전
* 2.postHandle(후처리) :컨트롤러 수행 후, 컨트롤러 수행 후 결과값 참조 가능
* 3.afterCompletion(view단 처리 후) : 보통 자원 반환( close() )을 수행
* 단, 비동기요청(자바내부에서의 비동기요청(ajax X) )은 가로채지 않는다
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
log.info("전처리 수행");
return HandlerInterceptor.super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
log.info("후처리 수행");
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
log.info("view처리 완료 후 수행");
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
'Spring' 카테고리의 다른 글
0502spring 게시판(2) 글 상세조회 (0) | 2023.05.02 |
---|---|
0501spring 게시판(1) 글 조회 (pagination(페이지번호) 포함) (0) | 2023.05.01 |
spring 파일업로드 중 에러springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactoryBean' defined in class with path resource (0) | 2023.04.29 |
0428spring마이페이지 (0) | 2023.04.28 |
0427spring 비동기로 웹페이지에 회원정보 전체조회 (0) | 2023.04.27 |