2023-06-21

1. 게시판 테이블 및 Domain, DTO 클래스 생성

CREATE TABLE board (
    seq     NUMBER(5) PRIMARY KEY,
    title   VARCHAR2(210),
    writer  VARCHAR2(21),
    content VARCHAR2(2000),
    regdate DATE DEFAULT sysdate,
    cnt     NUMBER(5) DEFAULT 0
);
@Getter 
@Setter
@ToString
@Builder
@NoArgsConstructor
public class Board {
	private int seq;
	private String title;
	private String writer;
	private String content;
	private Date regDate = new Date();
	private int cnt;
	private MultipartFile uploadFile;
	private String searchCondition;
	private String searchKeyword;
}
@Getter 
@Setter
@ToString
@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class BoardDTO {
	
	@JsonInclude(JsonInclude.Include.NON_DEFAULT)
	private int seq;
	private String title;
	private String writer;
	private String content;
	private Date regDate;
	@JsonInclude(JsonInclude.Include.NON_DEFAULT)
	private int cnt;
	private MultipartFile uploadFile;

}

2. BoardMapper 쿼리 & BoardMapper 인터페이스 생성

<?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="kr.co.springlegacy.mapper.BoardMapper">

	<!-- 게시판 글 조회 -->
	<select id="getBoard" resultType="Board">
		SELECT * FROM board
		WHERE seq = #{seq}
	</select>

	<!-- 게시판 글 목록 -->
	<select id="getBoardList" resultType="Board">
		SELECT * FROM board
	</select>

	<!-- 게시판 글 작성 -->
	<insert id="insertBoard" parameterType="Board">
		<selectKey keyProperty="seq" resultType="int" order="AFTER">
			SELECT seq FROM board WHERE rownum = 1 ORDER BY seq DESC
		</selectKey>
		INSERT INTO board (seq, title, writer, content)
		VALUES((select nvl(max(seq), 0)+1 from board), #{title}, #{writer}, #{content})
	</insert>
	
	<!-- 게시판 글 수정 -->
	<update id="updateBoard" parameterType="Board">
		UPDATE board
		SET title = #{title}, content = #{content}
		WHERE seq = #{seq}
	</update>
	
	<!-- 게시판 글 삭제 -->
	<delete id="deleteBoard">
		DELETE FROM board
		WHERE seq = #{seq}
	</delete>
	
</mapper>

※ resultType과 parameterType은 원래 kr.co.springlegacy.domain.Board로 Board클래스가 있는 패키지 경로를 명시해야 하나 mybatis-config.xml에 typeAliases를 명시하면 Board로 줄여 쓸 수 있다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<typeAliases>
		<typeAlias type="kr.co.springlegacy.domain.Board" alias="Board" />
	</typeAliases>
	<mappers>
		<mapper resource="mapper/BoardMapper.xml" />
	</mappers>
</configuration>
public interface BoardMapper {
	
	<!-- 게시판  조회 -->
    public Board getBoard(int seq);
	
	<!-- 게시판  목록 -->
	public List<Board> getBoardList();

	<!-- 게시판  작성 -->
	public void insertBoard(Board board);
	
	<!-- 게시판  수정 -->
	public void updateBoard(Board board);
	
	<!-- 게시판  삭제 -->
	public void deleteBoard(int seq);
	
}

3.BoardService 인터페이스 & BoardServiceImple 클래스 생성

public interface BoardService {
	
	public BoardDTO getBoard(BoardDTO boardDTO);

	public List<BoardDTO> getBoardList();
	
	public BoardDTO insertBoard(BoardDTO boardDTO);
	
	public BoardDTO updateBoard(BoardDTO boardDTO);
	
	public void deleteBoard(BoardDTO boardDTO);
}
@Service("boardService")
@RequiredArgsConstructor
public class BoardServiceImpl implements BoardService{

	private final BoardMapper boardMapper;

	/* 게시판 글 조회 */
	@Override
	public BoardDTO getBoard(BoardDTO boardDTO) {
		System.out.println("getBoard() 메소드");
		
		Board board = boardMapper.getBoard(boardDTO.getSeq());
		
		return BoardConverter.convertToDto(board);
	}
	
	/* 게시판 글 목록 */
	@Override
	public List<BoardDTO> getBoardList(){
		System.out.println("getBoardList() 메소드");
		
		List<Board> boardList = boardMapper.getBoardList();
		
		return BoardConverter.convertToDtoList(boardList);
	}

	/* 게시판 글 작성 */
	@Override
	//@Transactional
	public BoardDTO insertBoard(BoardDTO boardDTO) {
		System.out.println("insertBoard() 메소드");
		
		Board insertBoard = BoardConverter.convertToModel(boardDTO);

		boardMapper.insertBoard(insertBoard);
		
		BoardDTO insertBoardDTO = BoardConverter.convertToDto(boardMapper.getBoard(insertBoard.getSeq()));
		
		return insertBoardDTO;
	}

	/* 게시판 글 수정 */
	@Override
	//@Transactional
	public BoardDTO updateBoard(BoardDTO boardDTO) {
		System.out.println("updateBoard() 메소드");
		
		Board updateBoard = boardMapper.getBoard(boardDTO.getSeq());

		updateBoard.updateBoard(boardDTO.getTitle(), boardDTO.getContent());
		
		boardMapper.updateBoard(updateBoard);
		BoardDTO updateBoardDTO = BoardConverter.convertToDto(boardMapper.getBoard(boardDTO.getSeq()));
		
		return updateBoardDTO;
	}

	/* 게시판 글 삭제 */
	@Override
	//@Transactional
	public void deleteBoard(BoardDTO boardDTO) {
		System.out.println("deleteBoard() 메소드");
		
		boardMapper.deleteBoard(boardDTO.getSeq());
	}
}

4. BoardController 클래스 생성

@RequiredArgsConstructor
@RestController
public class BoardController {

	private final BoardService boardService;
	
	/* 게시판 글 조회 */
	@GetMapping("/board/{seq}")
	public ResponseEntity<BoardDTO> getBoard(BoardDTO boardDTO){
		BoardDTO boardDTO2 = boardService.getBoard(boardDTO);

		return new ResponseEntity<>(boardDTO2, HttpStatus.OK);
	}
	
	/* 게시판 글 목록 */
	@GetMapping("/board")
	public ResponseEntity<List<BoardDTO>> getBoardList(){
		List<BoardDTO> boardDTOList = boardService.getBoardList();
		
		return new ResponseEntity<>(boardDTOList, HttpStatus.OK);
	}
	
	/* 게시판 글 작성 */
	@PostMapping(value = "/board")
	public ResponseEntity<BoardDTO> insertBoard(@RequestBody BoardDTO boardDTO) {
		BoardDTO insertBoardDTO = boardService.insertBoard(boardDTO);
		return new ResponseEntity<>(insertBoardDTO, HttpStatus.OK);
	}
	
	/* 게시판 글수정 */
	@PutMapping("/board/{seq}")
	public ResponseEntity<BoardDTO> updateBoard(@PathVariable int seq, @RequestBody BoardDTO boardDTO) {
		boardDTO.setSeq(seq);
		
		System.out.println(boardDTO.toString());
		
		BoardDTO updateBoardDTO = boardService.updateBoard(boardDTO);
		
		return new ResponseEntity<>(updateBoardDTO, HttpStatus.OK);
	}
	
	/* 게시판 글 삭제 */
	@DeleteMapping("/board/{seq}")
	public ResponseEntity<BoardDTO> deleteBoard(BoardDTO boardDTO){
		System.out.println(boardDTO.toString());
		
		BoardDTO deleteBoardDTO = boardService.getBoard(boardDTO);
				
		boardService.deleteBoard(boardDTO);
		
		return new ResponseEntity<>(deleteBoardDTO, HttpStatus.OK);
	}
}

현재 OOOOMapper.xml에 쿼리 작성 -> OOOOMapper.java 인터페이스에 mapper 메소드 선언 -> OOOOService 인터페이스에 service 메소드 선언 -> OOOOServiceImpl 클래스에 service 메소드 정의 -> OOOOController 생성하는 순서대로 나열했습니다.

댓글남기기