게시글을 등록하는 글쓰기를 만들어 보려고 한다.
글쓰기 버튼이 어디있는지 살펴보자.
webapp / view / content / board_list.jsp 파일에 있다.
input 타입이 button으로 되어 있으니, form action = "boardDetail.bo"로 가지 않고 직접 경로를 지정해준다.
onclick="goBoardWrite(); input 태그내에 경로를 위처럼 자바스크립트 형태로 만들어주었는데,
단, 위 c:if test ~~ 문장으로 세션에 들어있는 loginInfo 값이 빈 값이 아닌,, 즉, 일치할 때 (로그인이 되었을 때) 쓸 수 있다.
html head태그 밑에 <script>를 써서 자바스크립트 문법으로 board_write.bo로 보내는것으로 코드를 짜보았다.
BoardController.java 서블릿
해당 서블릿으로 이동하면 별다른 코드없이 바로 board_write.jsp로 가라고 한다.
board_write.jsp
이번엔 input type을 submit으로 주어 TITLE의 name과 CONTENT의 name 값을 갖고서
write_commit.bo 서블릿으로 이동한다.
BoardController.java 서블릿
board_write.jsp에서 전달해준 title과 content name 값들을 문자열로 받아 저장 시켜주었다.
이후 바로 board-mapper.xml로 돌아가자.
board-mapper.xml
resultMap은 select 쿼리가 있을때 받아서 사용하지만, 나중에 사용할 것이니 미리 만들어두고,
게시글 등록을 위해 insert문을 사용해 쿼리를 타이핑 했다.
VALUES 값으로 받아오는 BOARD_NUM 자리에 (SELECT NVL(MAX(BOARD_NUM), 0) + 1 FROM BOARD)
NVL은 Oracle 카테고리에 언급한 적이 한번 있다. NVL은 (~~, 0 )에서 ~~의 NULL 값을 0으로 바꿔주세요. 이다
BOARD 테이블에서 BOARD_NUM의 최대값이 현재 없기 때문에 NULL인데, 이것을 0으로 바꾼 후, +1 하라는 뜻이다.
이후, BOARD_NUM의 값은 1이 되면서 0으로 초기화 하지 않고 다음번에는 +1을 더해 2, 3, 4 이런식으로 증가한다.
mapper를 완료했으면 service패키지로 돌아온다.
매개변수 및 리턴 타입 결정 방법(우선적으로 실행 시 쿼리를 작성)
매개변수 : 쿼리 실행 시 빈 값을 채울 용도
1. 쿼리에서 채워 줄 값이 없을 경우 : 매개변수 없음
2. 채워줄 값이 하나일 경우
2-1) 채워줄 값이 숫자인 경우 : 매개변수 int형 하나
2-2) 채워줄 값이 문자인 경우 : 매개변수 String형 하나
3. 채워줄 값이 여러개인 경우 : 매개변수는 DTO 객체.
리턴타입 : 쿼리 실행 결과를 어떻게 받아올지에 대한 정의
INSERT, UPDATE, DELETE 쿼리 실행 결과는
리턴타입을 int 혹은 void 사용하면됨.
SELECT 쿼리 결과의 리턴타입은 크게 두 가지로 나뉨.
조회결과 데이터가 무조건 한줄만 조회 : DTO 객체.
조회 결과 데이터가 0줄이상 가변적일 경우 : List<DTO> 객체.
BoardService.java 인터페이스
insert 쿼리를 사용했고, 조회 결과는 등록 한줄이므로 DTO객체를 사용한다.
insert쿼리문에서 만들었던 id가 메소드 명이되고, 매개변수로 boardDTO를 받을 수 있다.
BoardServiceImpl.java 클래스
Impl 클래스로 넘어와 게시글 등록 오버라이딩을 생성해 준 후sqlSession을 삽입하고 커밋까지 완료해준다.
BoardController.java 서블릿
이후 아까 나중에 하려고 했던 작업을 시작하자. 먼저 로그인 한 정보를 가져오기 위해 세션을 불러온다.
세션에 있는 loginInfo를 MemberDTO객체의 loginInfo 데이터에 넣어줄 수 있다.
이때 session은 Object 자료형이기 때문에 (MemberDTO)을 이용해 형변환해서 loginInfo에 넣어줄 수 있다.
이후 BoardDTO로 새로운 board 객체 공간을 생성해 준 후 세터를 이용해 각 데이터들을 넣어준다.
loginInfo의 MemId값을 board의 Writer에 넣어준다.
이후 쿼리 작성을 해주었던 boardService에서 insertBoard의 매개변수 값을 board로 설정한 후
"list"라는 이름으로 boardList.bo 페이지로 뿌려준다.
주석으로 칠한 List는 게시글 리스트를 뽑아내는 것이나, 다음에 해보려고 한다. 일단 생략하고,
이렇게 해서 board_list.jsp로 페이지로 갈 수 있다.
TITLE과 CONTENT에 데이터를 입력하고 글 등록을 눌렀는데, BOARD 게시판은 텅텅 비어있다. 왜그런가?
분명 데이터 베이스에서도 잘 들어가있다. 이유는 저장된 데이터를 List형태로 아직 출력하지 않아서이다.
다음 장에서는 등록된 게시글 리스트를 조회하는 방법에 대해서 알아보자.
댓글