하루의 일상💜

[Spring] #1. 게시판 만들기 _ DB 테이블 VO로 만들고 Mapper에서 DB로 insert 하기 (추가, 수정, 조회, 전체조회) 본문

SpringBoot

[Spring] #1. 게시판 만들기 _ DB 테이블 VO로 만들고 Mapper에서 DB로 insert 하기 (추가, 수정, 조회, 전체조회)

도하루박 2022. 11. 18. 20:02
반응형
oracle에 게시판 테이블 생성

게시판을 만들기 위해서 먼저 oracle에서 table을 만든다음 진행을 하도록 한다. 

CREATE SEQUENCE SEQ_BOARD;

CREATE TABLE TBL_BOARD(
   BOARD_NUMBER NUMBER CONSTRAINT PK_BOARD PRIMARY KEY,
   BOARD_TITLE VARCHAR2(500),
   BOARD_WRITER VARCHAR2(500),
   BOARD_CONTENT VARCHAR2(500),
   BOARD_REGISTER_DATE DATE DEFAULT SYSDATE,
   BOARD_UPDATE_DATE DATE DEFAULT SYSDATE
);

 

 

만들어진 테이블을 VO로 담아 getter, setter, toString 생성

//아래는 Lombok을 사용하여 getter, setter, toString 자동생성됨

src > main > java > domain.vo > BoardVO 경로 안에 VO를 생성해준다.

package com.example.app.domain.vo;

import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;

@Component
@Data
@NoArgsConstructor
public class BoardVO {
    private Long boardNumber;
    private String boardTitle;
    private String boardWriter;
    private String boardContent;
    private String boardRegisterDate;
    private String boardUpdateDate;

    public void create(String boardTitle, String boardWriter, String boardContent) {
        this.boardTitle = boardTitle;
        this.boardWriter = boardWriter;
        this.boardContent = boardContent;
    }
}

 

 

 

boardMapper.java 설정

사용해야할 BoardMapper.xml 에서 사용해야하는 boardVO 인터페이스가 필요하므로 

main > java > mapper  경로 안에 BoardMapper.java 인터페이스를 설정해준다.

package com.example.app.mapper;

import com.example.app.domain.vo.BoardVO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface BoardMapper {
//    추가
    public void insert(BoardVO boardVO);
//    수정
    public void update(BoardVO boardVO);
//    삭제
    public void delete(Long boardNumber);
    
//    조회
    public BoardVO select(Long boardNumber);
//    조회는 하나만 리턴을 할 것이기 때문에 BoardVO 타입으로 받아 올 것이고, 외부에서 당연히 키값을 받아야 하나를 조회할 수 있으니까 
//    boardNumber를 받는 것이다.
    
//    전체 조회
    public List<BoardVO> selectAll();
//    전체조회로 BoardVO가 여러개이니까 List 타입으로 받아온다.
}

 

boardMapper.xml 설
<mapper namespace="com.example.app.mapper.BoardMapper">
</mapper>

namespace 경로에 유의하여 생성한다.

 

게시판 추가

BoardMapper.xml 에 추가된 내용

MyBatis 환경 문법으로 작성하였다.

	//추가
    <insert id="insert">
        INSERT INTO TBL_BOARD(BOARD_NUMBER, BOARD_TITLE, BOARD_WRITER, BOARD_CONTENT)
        VALUES(SEQ_BOARD.NEXTVAL, #{boardTitle}, #{boardWriter}, #{boardContent})
	</insert>

	//수정
    <update id="update">
        UPDATE TBL_BOARD
        SET BOARD_TITLE = #{boardTitle}, BOARD_CONTENT = #{boardContent}, BOARD_UPDATE_DATE = SYSDATE
        WHERE BOARD_NUMBER = #{boardNumber}
    </update>

	//삭제
    <delete id="delete">
        DELETE FROM TBL_BOARD
        WHERE BOARD_NUMBER = #{boardNumber}
    </delete>

	//조회
    <select id="select" resultType="boardVO">
        SELECT BOARD_NUMBER, BOARD_TITLE, BOARD_WRITER, BOARD_CONTENT, BOARD_REGISTER_DATE, BOARD_UPDATE_DATE
        FROM TBL_BOARD
        WHERE BOARD_NUMBER = #{boardNumber}
    </select>


	//전체조회
    <select id="selectAll" resultType="boardVO">
        SELECT BOARD_NUMBER, BOARD_TITLE, BOARD_WRITER, BOARD_CONTENT, BOARD_REGISTER_DATE, BOARD_UPDATE_DATE
        FROM TBL_BOARD
    </select>

위의 쿼리중 select는 resultType를 vo로 설정해줬음으로 

resources > config > config.xml 경로에 Alias를 설정해준다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0/EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <typeAlias type="com.example.app.domain.vo.BoardVO" alias="boardVO"/>
    </typeAliases>
</configuration>

 

test > java > mapper 경로에서 insert 쿼리 테스트롤 돌려보고 DB에 적용이 되는지 확인한다.

package com.example.app.mapper;

import com.example.app.domain.vo.BoardVO;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
@Slf4j
public class BoardMapperTest {
    @Autowired
    private BoardMapper boardMapper;

//    추가
    @Test
    public void insertTest(){
        BoardVO boardVO = new BoardVO();
        boardVO.create("테스트 게시글 제목", "홍길동", "테스트 게시글 내용");
        boardMapper.insert(boardVO);
    }
//    수정
    @Test
    public void updateTest(){
        BoardVO boardVO = boardMapper.select(1L);
        boardVO.setBoardTitle("수정된 게시글 제목");
        boardMapper.update(boardVO);
    }

//    조회
    @Test
    public void selectTest(){
        log.info("board: " + boardMapper.select(1L));
    }

//    전체조회
    @Test
    public void selectAllTest(){
        boardMapper.selectAll().stream().map(BoardVO::getBoardTitle).forEach(log::info);
    }
    }

 

 

반응형