개발/술Talk

[Spring & Maria DB] Restful API 게시판 CRUD

황성안 2021. 8. 12. 21:34
728x90

[JS] 게시판

환경

  • HeidiSQL 11.3.0.6295
  • Maria DB 10.6.3

MariaDB

게시판 테이블 만들기

게시판 테이블의 이름은 board 로명해줍니다.

BOARD_NO : 게시판의 번호

TYPE : 불만/건의/공지 등의 타입 선택

TITLE : 제목

CONTENT : 내용

CNT : 조회수

USER : 글쓴이

YMD : 글쓴 시간

으로 나타내고자 ERD를 구성하였습니다.

CREATE TABLE `board` (
    `BOARD_NO` INT(11) NOT NULL AUTO_INCREMENT,
    `BOARD_TYPE` VARCHAR(20) NOT NULL COLLATE 'utf8mb3_general_ci',
    `BOARD_TITLE` VARCHAR(30) NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
    `BOARD_CONTENT` TEXT NULL DEFAULT NULL COLLATE 'utf8mb3_general_ci',
    `BOARD_CNT` INT(11) NULL DEFAULT '0',
    `BOARD_USER` VARCHAR(20) NOT NULL COLLATE 'utf8mb3_general_ci',
    `BOARD_YMD` TIMESTAMP NOT NULL DEFAULT current_timestamp(),
    PRIMARY KEY (`BOARD_NO`) USING BTREE
)
COLLATE='utf8mb3_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=9
;

[Spring]

vo

DB에서 작성된 것들을 가져와준다.

Board

package talk.server.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Board {
    private int BOARD_NO;// 게시판 번호
    private String BOARD_TYPE;// 건의, 불만 등 적는거
    private String BOARD_TITLE;// 제목
    private String BOARD_CONTENT;// 내용
    private int BOARD_CNT; //조회수
    private String BOARD_USER; // 글 작성자
    private Date BOARD_YMD; // 년 월 일 시간 분 초
}

Boardupdate

package talk.server.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Boardupdate {
    private int board_no;// 게시글 번호
    private String board_type;// 건의, 불만 등 적는거
    private String board_title;// 제목
    private String board_content;// 내용
}

DAO

BoardDao

package talk.server.dao;

import talk.server.vo.Board;
import talk.server.vo.Boardupdate;

import java.util.ArrayList;

public interface BoardDao {
    // 게시글 정보 불러오기
    public ArrayList<Board> getAllBoard();

    // 게시글 CRUD
    //C
    public int createsuc(Board board);

    // 게시글 디테일 정보 불러오기
    public Board boarddetail(int board_no);

    // 게시글 업데이트
    public int boardupdate(Boardupdate boardupdate);

    //게시글 삭제
    public void boarddelete(int board_no);
}

service

BoardService

package talk.server.service;

import talk.server.vo.Board;
import talk.server.vo.Boardupdate;

import java.util.ArrayList;

public interface BoardService {
    //게시물 전체 리스트
    public ArrayList<Board> getAllBoard();

    //게시물 작성
    public int createsuc(Board board);

    //게시물 상세보기
    public Board boarddetail(int board_no);

    //게시물 업데이트
    public int boardupdate(Boardupdate boardupdate);

    //게시물 삭제
    public void boarddelete(int board_no);
}

BoardServiceImpl

package talk.server.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import talk.server.dao.BoardDao;
import talk.server.vo.Board;
import talk.server.vo.Boardupdate;

import java.util.ArrayList;

@Service
public class BoardServiceImpl implements BoardService{

    @Autowired
    BoardDao dao;

    @Override
    public ArrayList<Board> getAllBoard() {
        return dao.getAllBoard();
    }

    @Override
    public int createsuc(Board board) {
        return dao.createsuc(board);
    }

    @Override
    public Board boarddetail(int board_no){
        return dao.boarddetail(board_no);
    }
    @Override
    public int boardupdate(Boardupdate boardupdate) {
        return dao.boardupdate(boardupdate);
    }

    @Override
    public void boarddelete(int board_no){
        dao.boarddelete(board_no);
    }
}

mapper

게시판 board 의 sql 문을 작성해주기 위해 코딩해주는 곳입니다.

<?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="talk.server.dao.BoardDao">
<!--게시판 모든 리스트 불러오기 -->
    <select id="getAllBoard" resultType="Board">
        select * from board
    </select>
<!--게시판 작성 목록 가저와서 넣기 -->
    <insert id="createsuc"
            parameterType="talk.server.vo.Board">
        INSERT INTO BOARD
        VALUES(null, #{BOARD_TYPE}, #{BOARD_TITLE}, #{BOARD_CONTENT}, #{BOARD_CNT}, #{BOARD_USER}, #{BOARD_YMD});
    </insert>
<!--게시판 상세 보기위한 세부 내용 불러오기 게시판 번호로 -->
    <select id="boarddetail" resultType="Board" parameterType="java.lang.Integer">
        select * from board
        where BOARD_NO = #{board_no}
    </select>
<!--게시판 번호로 삭제하기 -->
    <delete id="boarddelete" parameterType="java.lang.Integer">
        delete from board
        where BOARD_NO = #{board_no}
    </delete>
<!--해당하는 게시판 번호를 수정하기 -->
    <update id="boardupdate" parameterType="talk.server.vo.Board">
        UPDATE board
        SET BOARD_TYPE=#{board_type}, BOARD_TITLE=#{board_title}, BOARD_CONTENT=#{board_content}, BOARD_YMD=sysdate()
        WHERE BOARD_NO=#{board_no}
    </update>

</mapper>

[postman] test

게시판 전체 리스트 반환(읽기)

GET : http://localhost:8080/board/boardlist

 

게시판 작성(만들기)

Post : http://localhost:8080/board/boardcreate

{
    "BOARD_TYPE":"테스트하기 타입.",
    "BOARD_TITLE":"제목 테스트",
    "BOARD_CONTENT":"내용 테스트",
    "BOARD_CNT":0,
    "BOARD_USER":"태현",
    "BOARD_YMD":"11/11/11 11:11:11"
}
  • 참고로 포스트맨기능중에 실시간을 보낼수있는게 있나요? 아시면 ㅠㅠ 알려주세요..
  • 현재 제 시간 데이터는 저렇게 넣기로 약속을했습니다!

게시판 수정(업데이트)

POST : http://localhost:8080/board/boardupdate

{
    "board_no":8,
    "board_type":"테스트",
    "board_title":"제목 테스트",
    "board_content":"내용 테스트"

}

게시판 삭제(삭제)

GET : http://localhost:8080/board/boarddelete?board_no=10

Params 에서 board_no가 key가 되고 VALUE는 삭제하고 싶은 게시판의 번호를 작성해주세요!

728x90