1. detail.mustache
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Document</title>
</head>
<body>
<nav>
<ul>
<li>
<a href="#">홈</a>
</li>
<li>
<a href="#">글쓰기</a>
</li>
</ul>
</nav>
<hr>
<section>
<div>
번호: {{model.id}}<br>
제목: {{model.title}}<br>
내용: {{model.content}}<br>
작성일: {{model.createdAt}}<br>
</div>
</section>
</body>
<script>
console.log("되냐?");
</script>
</html>
- 중괄호 두 개 사이에 지정된 키값과 필드명을 사용하여 값을 가져올 수 있다.
2. BoardController
@RequiredArgsConstructor
@Controller
public class BoardController {
private final BoardService boardService;
@GetMapping("/board/{id}")
public String detail(@PathVariable("id") int id, Model model) {
BoardResponse.DetailDTO boardDetail = boardService.게시글상세보기(id);
model.addAttribute("model", boardDetail);
return "detail";
}
}
@GetMapping("/board/{id}")
: URL 경로에서 중괄호로 감싼 값을 메서드에서@PathVariable("id")
어노테이션을 사용하여int id
형태로 받을 수 있다.
boardService
의게시글상세보기
메서드를 통해DetailDTO
객체로 정보를 받아model
에 저장하고, 이를 뷰로 전달한다.
3. BoardResponse
public class BoardResponse {
@Data
public static class DetailDTO {
private int id;
private String title;
private String content;
private String createdAt;
public DetailDTO(Board board) {
this.id = board.getId();
this.title = board.getTitle();
this.content = board.getContent();
this.createdAt = board.getCreatedAt().toLocalDateTime().format(DateTimeFormatter.ofPattern("yyyy.MM.dd"));
}
}
}
Board
객체를 매개변수로 받아DetailDTO
를 생성한다.
- 작성일은
format
메서드를 사용해2024.11.18
과 같은 형식으로 변환한다.
4. BoardService
@RequiredArgsConstructor
@Service
public class BoardService {
private final BoardRepository boardRepository;
public BoardResponse.DetailDTO 게시글상세보기(int id) {
Board board = boardRepository.findById(id);
return new BoardResponse.DetailDTO(board);
}
}
boardRepository
의findById
메서드를 사용해 게시글 정보를 가져와board
에 저장한다.
- 해당 정보를 바탕으로
DetailDTO
를 생성하여 반환한다.
5. BoardRepository
@RequiredArgsConstructor
@Repository
public class BoardRepository {
private final EntityManager entityManager;
public Board findById(int id) {
Query q = entityManager.createNativeQuery("select * from board_tb where id = ?", Board.class);
q.setParameter(1, id);
return (Board) q.getSingleResult();
}
}
entityManager
의createNativeQuery
메서드를 사용하여 쿼리를 생성한다.
- 쿼리문에서 값은
?
로 설정한다.
setParameter
메서드를 사용하여?
에 인덱스와 값을 설정한다.- 인덱스는 1부터 시작한다.
getSingleResult()
메서드를 호출하여 결과를Object
로 받아Board
로 다운캐스팅하여 반환한다.- 테이블에서 하나의 행만 반환할 때 사용되며, 반환값은
Object
타입이다.
6. 출력 확인

Share article