SpringBoot와 MyBatis를 이용한 maybeCafe(아마도카페)프로젝트
가입인사는 수정기능 없이 조회, 등록, 삭제기능만 지원.
- GreetBoardService.interface -
public void delete(int gno); // 가입인사 삭제
- GreetBoardMapper.interface -
public void delete(int gno); // 가입인사 삭제
- GreetBoardMapper.xml -
<delete id="delete">
DELETE FROM greetboard WHERE gno = #{gno}
</delete>
- GreetBoardServiceImpl -
@Override
public void delete(int gno) {
gBoardMapper.delete(gno);
}
- GreetBoardMapperTest -
@MybatisTest
@AutoConfigureTestDatabase(replace = Replace.NONE) // 현재 연결된 실제DB로 테스트함을 의미
@Rollback(value = false) // 테스트시 롤백 안함
@Log
public class GreetBoardMapperTest {
// JUnit 5버전으로 테스트
@Autowired
private GreetBoardMapper gBoardMapper;
@Test
public void testDeleteGreetBoard() {
gBoardMapper.delete(4);
}
}
gno 4번 가입인사 삭제
- GreetBoardController -
@GetMapping("/delete")
public String greetDelete(@RequestParam("gno") int gno, RedirectAttributes attr) {
gBoardService.delete(gno);
attr.addFlashAttribute("message", "삭제되었습니다.");
return "redirect:/greetboard/list";
}
- greetList.html -
<body>
<h3>가입인사</h3>
<div>
<p><a th:href="@{/}">메인페이지</a></p>
</div>
<div>
<form th:action="@{/greetboard/write}" method="post" th:object="${board}">
<div>
<label for="content">내용</label>
<textarea th:field="*{content}" rows="3" required></textarea>
</div>
<div>
<label for="writer">작성자</label>
<input type="text" th:field="*{writer}" required />
</div>
<button type="submit">가입인사 남기기</button>
</form>
</div>
<div>
<table>
<thead>
<tr>
<th>NO</th>
<th>등록일</th>
<th>작성자</th>
<th>내용</th>
<th></th>
</tr>
</thead>
<tbody>
<tr th:each="board : ${greetboard}">
<td><span th:text="${board.gno}"></span></td>
<td><span th:text="${#temporals.format(board.regdate , 'yyyy-MM-dd a hh:mm:ss')}"></span></td>
<td><span th:text="${board.writer}"></span></td>
<td><span th:text="${board.content}"></span></td>
<td><a th:href="@{/greetboard/delete(gno=${board.gno})}" onclick="return deleteConfirm();">삭제하기</a></td>
</tr>
</tbody>
</table>
</div>
<script>
function deleteConfirm() {
return confirm('삭제하시겠습니까?');
}
</script>
<script th:if="${message}">
let m = '[[${message}]]'; // 리다이렉트로 넘어온 메시지 저장
alert(m); // 화면에 메시지 띄우기
</script>
</body>
반복문 내의 gno데이터를 이용해 가입인사를 삭제
<a th:href="@{/greetboard/delete(gno=${board.gno})}" onclick="return deleteConfirm();">삭제하기</a>
function deleteConfirm() {
return confirm('삭제하시겠습니까?');
}
삭제여부를 javascript를 통해 묻되 확인을 누르면 다시 a태그의 th:href
주소로 페이지를 이동하며, 취소를 누르면 아무 동작도 하지않음.
=> href
의 실행보다 onclick
의 실행이 더 먼저 되어야하므로 onclick="return 호출할함수명();"
으로 함수명 앞에 return
을 추가함.
8번 가입인사가 삭제됨을 확인가능.