[Spring] 프로젝트 - 게시판 구현
게시판 작성에 필요한 ORACLE 테이블을 구현하고 생성해주려고 합니다.
create table gift_board(
bno number,
title varchar2(150) not null,
content varchar2(2000) not null,
writer varchar2(50) not null,
regdate date default sysdate,
updatedate date default sysdate,
constraint pk_board PRIMARY key(bno)
);
bno number는, 쇼핑몰 데이터 베이스 에서 사용했던 시퀀스를 다시 이용할 생각입니다.
CREATE SEQUENCE NO_SEQ_BOARD
START WITH 1
INCREMENT BY 1
MAXVALUE 10000
MINVALUE 1
NOCYCLE;
insert into gift_board(bno,title, content, writer) values (NO_SEQ_BOARD.NEXTVAL,'테스트 제목', '테스트 내용', '작성자');
insert into로 데이터를 집어넣고 select 문구를 이용하여 해당 데이터들이 제대로 들어갔는지 확인합니다. 모두 완료됐다면 commit 을 이용해 마무리해줍니다.
오라클을 끝냈다면 다시 sts로 돌아와서 vo를 작성해줘야합니다.
package edu.hi.model;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class BoardVO {
/** 게시판 번호 */
private int bno;
/** 게시판 제목 */
private String title;
/** 게시판 내용 */
private String content;
/** 게시판 작가 */
private String writer;
/** 등록 날짜 */
private Date regdate;
/** 수정 날짜 */
private Date updateDate;
}
BoardVO.java
BoardVO를 작성했다면 여태까지와 마찬가지로 Mapper, interface 등 작성해줍니다.
package edu.hi.mapper;
import org.apache.ibatis.annotations.Mapper;
import edu.hi.model.BoardVO;
@Mapper
public interface BoardMapper {
/** 작성자 등록 */
public void enroll(BoardVO board);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="edu.hi.mapper.BoardMapper">
<!-- 게시판 등록 -->
<insert id="enroll">
insert into gift_board(bno, title, content, writer) values (NO_SEQ_BOARD.NEXTVAL,#{title}, #{content}, #{writer})
</insert>
</mapper>
Mapper를 모두 작성한 후에 Service단을 작성해주도록 합시다.
package edu.hi.service;
import edu.hi.model.BoardVO;
public interface BoardService {
/** 게시판 등록 */
public void enroll(BoardVO board);
}
package edu.hi.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import edu.hi.mapper.BoardMapper;
import edu.hi.model.BoardVO;
@Service
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardMapper mapper;
@Override
public void enroll(BoardVO board) {
mapper.enroll(board);
}
}
BoardVO를 이용한 Service 단입니다. boardserviceimpl / service 입니다. 다 확인됐다면 controller을 작성해주는일만 남았습니다.
@Controller
@RequestMapping("/board/*")
public class BoardController {
}
/board/~에서 넘어오는 처리를 이곳에서 모두 관리하기 위한 controlle입니다.
/** 게시판 리스트 진입 */
@GetMapping("/list")
// => @RequestMapping(value="list", method=RequestMethod.GET)
public void boardListGET() {
log.info("게시판 목록 페이지 진입");
}
/** 게시판 등록 진입*/
@GetMapping("/enroll")
// => @RequestMapping(value="enroll", method=RequestMethod.GET)
public void boardEnrollGET() {
log.info("게시판 등록 페이지 진입");
}
/board/list 에 접속할시 게시판 글의 목록이 나오는 페이지가,
/board/enroll 에 접속할 시 게시글을 작성하는 페이지가 나오도록 설정합니다.
<form action="/board/enroll" method="post">
<div class="input_wrap">
<label>Title</label>
<input name="title">
</div>
<div class="input_wrap">
<label>Content</label>
<textarea rows="3" name="content"></textarea>
</div>
<div class="input_wrap">
<label>Writer</label>
<input name="writer">
</div>
</form>
enroll.jsp에 form을 작성해주고 button까지 입력해줘서 post로 정보를 보내게 적용합니다. 이때 BoardVO에 있는 데이터를 사용해야 하니, input name명을 동일하게 맞춰주어야 합니다.
/** 게시판 등록 */
@PostMapping("/enroll")
public String boardEnrollPOST(BoardVO board, RedirectAttributes rttr) {
log.info("BoardVO : " + board);
bservice.enroll(board);
rttr.addFlashAttribute("result", "enrol success");
return "redirect:/board/list";
}
처리가 끝나면 /board/list 로 돌아오는 retrun값을 주어 작성이 완료되면 list 페이지로 넘어오게 설정합니다. addFlashAttribute를 이용하여 일회성 데이터 전송을 하는 방법으로 사용했습니다.