#5 Spring Framework Mybatis 게시판 만들기
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 생성하는 순서대로 나열했습니다.
댓글남기기