TDD / Mybatis - 게시글 등록
test 코드 작성
@Test
@DisplayName("게시글 등록 테스트")
public void insertBoardTest() {
int result = 0;
Board board = new Board();
board.setWriterNo(2); // Board 객체에 작성자 회원 번호 set
board.setTitle("mybatis 게시글");
board.setContent("mybatis 게시글 내용 등록");
result = service.save(board); // service에 Board 객체를 만들어서 넘겨줌
assertThat(result).isGreaterThan(0); // 저장이 잘 될 경우 영향받는 행의 갯수는 0 이상
}
service 코드 작성
public int save(Board board) {
int result = 0; // 결과값이 정수값이니까 먼저 만들어줌(DB에서 영향 받는 행의 갯수)
SqlSession session = getSession();
if(board.getNo() != 0) { // no = pk값. 0이면 등록, 아니면 수정
// update
// 수정 로직 작성 예정
} else {
// insert
result = dao.insertBoard(session, board);
}
if(result > 0) {
// 영향받은 행의 개수가 있음. 저장 또는 수정 성공
session.commit();
} else {
session.rollback();
}
session.close();
return result;
}
dao 코드 작성
public int insertBoard(SqlSession session, Board board) {
return session.insert("boardMapper.insertBoard", board);
}
쿼리문 작성
- 데이터 insert 후 PK값 받아오기
- 아래 test 코드에서 실제 게시글이 DB에 잘 저장 되었는지 확인하기 위해 no값으로 게시글 조회할 때 사용
- insert 태그에 useGeneratedKeys, keyColumn, keyProperty 속성 추가
- useGeneratedKeys : insert 후 PK 값을 받아오도록 허용
- keyColumn : PK 컬럼 지정
- keyProperty : PK 값이 담길 파라미터 객체의 필드명 지정
<insert id="insertBoard" parameterType="Board" useGeneratedKeys="true" keyColumn="NO" keyProperty="no">
INSERT INTO BOARD (
NO,
WRITER_NO,
TITLE,
CONTENT,
ORIGINAL_FILENAME,
RENAMED_FILENAME,
READCOUNT,
STATUS,
TYPE,
CREATE_DATE,
MODIFY_DATE
) VALUES (
SEQ_BOARD_NO.NEXTVAL,
#{ writerNo },
#{ title },
#{ content },
#{ originalFileName },
#{ renamedFileName },
DEFAULT,
DEFAULT,
DEFAULT,
DEFAULT,
DEFAULT
)
</insert>
test 코드 수정
- 리팩토링 진행하여 좀 더 자세히 테스트 해보기
- 실제로 저장이 잘 되었는지 게시글 객체를 꺼내서 확인하기
@Test
@DisplayName("게시글 등록 테스트")
public void insertBoardTest() {
int result = 0;
Board board = new Board();
Board findBoard = null;
board.setWriterNo(2);
board.setTitle("mybatis 게시글");
board.setContent("mybatis 게시글 내용 등록");
result = service.save(board);
findBoard = service.findBoardByNo(board.getNo()); // no로 게시글 조회
assertThat(result).isGreaterThan(0);
// 게시글 객체가 null이 아니고
// DB에 저장되어 있는 게시글 객체에서 추출한 no값이
// 게시글 객체의 no값고 동일한지 확인
assertThat(findBoard).isNotNull().extracting("no").isEqualTo(board.getNo());
}