1. 화면 확인

id는 눈에 보이지 않아도 꼭 들고 가야한다
2. BoardNativeRepository findById 추가
public Board findById(int id) {
Query query = em.createNativeQuery("select * from board_tb where id = ?", Board.class);
query.setParameter(1, id);
return (Board) query.getSingleResult();
}
3. 테스트 해보기
@Test
public void findById_test(){
// given
int id = 1;
// when
Board board = boardNativeRepository.findById(id);
//System.out.println("findById_test "+board);
// then
assertThat(board.getTitle()).isEqualTo("제목1");
assertThat(board.getContent()).isEqualTo("내용1");
}

import static을 해놓으면 앞에 Assert타입 이거 안 적어도 됨!
BoardController
@GetMapping("/board/{id}")
public String detail(@PathVariable Integer id, HttpServletRequest request) {
Board board = boardNativeRepository.findById(id);
request.setAttribute("board", board);
return "board/detail";
}
detail.mustache
<!-- 수정삭제버튼 -->
<div class="d-flex justify-content-end">
<!-- 수정버튼은 수정이 실제로 되는게 아니라 수정 폼으로 이동하는 거니까 a태그 -->
<a href="/board/{{board.id}}/update-form" class="btn btn-warning me-1">수정</a>
<form action="/board/{{board.id}}/delete" method="post">
<button class="btn btn-danger">삭제</button>
</form>
</div>
<div class="d-flex justify-content-end">
<b>작성자</b> : {{board.username}}
</div>
<!-- 게시글내용 -->
<div>
<h2><b>{{board.title}}</b></h2>
<hr />
<div class="m-4 p-2">
{{board.content}}
</div>
</div>
삭제는 무조건 post! get으로 하면 게시글을 삭제하면 클릭이 되어버리는 .. 공격을? 받을 수가? 있어요 ?
그래서 삭제 버튼은 from으로 감싸준다!
화면 확인

[ 에러 ]

이거 해줘라! name = id !
@GetMapping("/board/{id}")
public String detail(@PathVariable (name = "id") int id, HttpServletRequest request) {
Board board = boardNativeRepository.findById(id);
request.setAttribute("board", board);
return "board/detail";
}
이거를 안 적어주니까 못 찾아서 터짐. 명시적으로 적어주자!
Share article