TDD / Mybatis - 게시글 수정
test 코드 작성
- 게시글 번호로 조회하여 게시글 수정
@Test
@DisplayName("게시글 수정 테스트")
public void updateBoardTest() {
int result = 0;
Board board = service.findBoardByNo(161);
Board findBoard = null;
board.setTitle("mybatis 게시글 - 수정");
board.setContent("mybatis 게시글 내용 등록 - 수정");
board.setOriginalFileName(null);
board.setRenamedFileName(null);
result = service.save(board); // 저장하고
findBoard = service.findBoardByNo(board.getNo()); // 저장한 거 다시 확인. 해당 no(pk)값으로 조회
assertThat(result).isGreaterThan(0);
assertThat(findBoard).isNotNull().extracting("title").isEqualTo(board.getTitle());
}
service 코드 작성
public int save(Board board) {
int result = 0;
SqlSession session = getSession();
if(board.getNo() != 0) {
// update
result = dao.updateBoard(session, board);
} else {
// insert
result = dao.insertBoard(session, board);
}
if(result > 0) {
session.commit();
} else {
session.rollback();
}
session.close();
return result;
}
dao 코드 작성
public int updateBoard(SqlSession session, Board board) {
return session.update("boardMapper.updateBoard", board);
}
쿼리문 작성
- 방법 1) 동적 쿼리 사용하지 않고 작성
- 방법 2) 동적 쿼리 사용하여 작성
- OriginalFileName / RenamedFileName을 지정하지 않을 경우 null로 수정되기 때문에 동적 쿼리 사용
방법 1
<update id="updateBoard" parameterType="Board">
<!-- 동적쿼리 사용 X : 기존 JDBC에서 사용하던 쿼리문을 사용하여 update -->
UPDATE BOARD
SET TITLE = #{ title },
CONTENT = #{ content },
ORIGINAL_FILENAME = #{ originalFileName },
RENAMED_FILENAME = #{ renamedFileName },
MODIFY_DATE = SYSDATE
WHERE NO = #{ no }
</update>
-
방법 2
<update id="updateBoard" parameterType="Board">
<!-- 다중 if 사용 -->
UPDATE BOARD
SET
<if test="title != null">
TITLE = #{ title },
</if>
<if test="content != null">
CONTENT = #{ content },
</if>
<if test="originalFileName != null">
ORIGINAL_FILENAME = #{ originalFileName },
</if>
<if test="renamedFileName != null">
RENAMED_FILENAME = #{ renamedFileName },
</if>
MODIFY_DATE = SYSDATE
WHERE NO = #{ no }
<!-- set 사용 -->
UPDATE BOARD
<set>
<if test="title != null">
TITLE = #{ title },
</if>
<if test="content != null">
CONTENT = #{ content },
</if>
<if test="originalFileName != null">
ORIGINAL_FILENAME = #{ originalFileName },
</if>
<if test="renamedFileName != null">
RENAMED_FILENAME = #{ renamedFileName },
</if>
MODIFY_DATE = SYSDATE
</set>
WHERE NO = #{ no }
<!-- trim 사용 -->
UPDATE BOARD
<trim prefix="SET" suffixOverrides=",">
<if test="title != null">
TITLE = #{ title },
</if>
<if test="content != null">
CONTENT = #{ content },
</if>
<if test="originalFileName != null">
ORIGINAL_FILENAME = #{ originalFileName },
</if>
<if test="renamedFileName != null">
RENAMED_FILENAME = #{ renamedFileName },
</if>
MODIFY_DATE = SYSDATE
</trim>
WHERE NO = #{ no }
</update>