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