SpringBoot/Project

[Spring] 프로젝트 - 게시판 구현

함형우 2022. 9. 8. 10:54
728x90

 게시판 작성에 필요한 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를 이용하여 일회성 데이터 전송을 하는 방법으로 사용했습니다.

 

 

728x90