리포지토리

@Transactional
public void updateById(int id, String title, String content) {
    Board board = findById(id);
    board.setTitle(title);
    board.setContent(content);
} // 더티채킹, 이러면 다른걸 지가 보고 알아서 업데이트 쿼리 짜서 발동시켜줌

테스트

@Test
public void updateById_test(){
    // given
    int id = 1;
    String title = "새 제목1";
    String content = "새 내용1";

    // when
    boardRepository.updateById(id, title, content);
    em.flush();

    // then
    System.out.println(boardRepository.findById(id));
}

Untitled

Untitled

Untitled

컨트롤러 수정 겟매핑

@GetMapping("/board/{id}/update-form")
public String update(@PathVariable(name = "id") Integer id, HttpServletRequest request) {
    Board board = boardRepository.findById(id);
    request.setAttribute("board", board);
    
    return "board/update-form";
}

머스테치 확인(보드 적혀있는지)

{{> layout/header}}

<div class="container p-5">

    <!-- 요청을 하면 localhost:8080/board/save POST로 요청됨
    title=사용자입력값&content=사용자값 -->
    <div class="card">
        <div class="card-header"><b>글수정하기 화면입니다</b></div>
        <div class="card-body">
            <form action="/board/{{board.id}}/update" method="post">
                <div class="mb-3">
                    <input type="text" class="form-control" placeholder="Enter title" name="title" value="{{board.title}}">
                </div>
                <div class="mb-3">
                    <textarea class="form-control" rows="5" name="content">{{board.content}}</textarea>
                </div>
                <button type="submit" class="btn btn-primary form-control">글수정하기 완료</button>
            </form>
        </div>
    </div>
</div>

{{> layout/footer}}

수정하기 완료 누르면 나오는 포스트매핑 해야하니 dto 만들어야함

@Data
public static class updateDTO {
    private String title;
    private String content;
}

컨트롤러 수정

@PostMapping("/board/{id}/update")
public String findById(@PathVariable Integer id, BoardRequest.updateDTO requestDTO) {
    boardRepository.updateById(id, requestDTO.getTitle(), requestDTO.getContent());

    return "redirect:/board/" + id;
}