본문 바로가기
CSE

springboot 게시판 따라만들기2

by bartizan_ 2023. 6. 1.
728x90

제공된 프로시저를 mysql에 붙여 넣어줌으로써 데이터들을 확보합니다.

 

use board;

DELIMITER $$

CREATE PROCEDURE testDataInsert()
BEGIN
    DECLARE i INT DEFAULT 1;

    WHILE i <= 120 DO
        INSERT INTO board(title, content)
          VALUES(concat('제목',i), concat('내용', i));
        SET i = i + 1;
    END WHILE;
END$$
DELIMITER $$

call testDataInsert();
@GetMapping("/board/list")
public String boardList(Model model){
    model.addAttribute("list", boardService.boardList());
    //리스트를 반환한다.

    return "boardlist";
}

rerturn 위치가 boardlist라는 html인 겁니다. 그 이름으로 html 파일을 만들어줍니다.

 

BoardService에 

public List<Board> boardList(){
    return boardRepository.findAll();
}

를 추가해 줍니다.  만든 거를 컨트롤러에서 사용해 보겠습니다. 

@GetMapping("/board/list")
public String boardList(Model model){
    model.addAttribute("list", boardService.boardList());
    //리스트를 반환한다.

    return "boardlist";
}

 

Controller의 메서드는 Model이라는 타입의 객체를 파라미터로 받을 수 있다.
순수하게 JSP Servlet으로 웹 애플리케이션을 만들 때 보통 request나 session 내장객체에 정보를 담아 jsp에 넘겨주곤 했는데 Spring에서는 Model를 쓴다고 합니다. 

 

해당 html에는

xmlns:th = "http://www.thymeleaf.org"

를 추가해 줍니다. 아래에 

<tr th:each="board : ${list}">
  <td th:text="${board.id}">id</td>
  <td th:text="${board.title}">제목</td>
</tr>

each는 반복문입니다. 

 

[상세글 확인하기]를 진행해 보겠습니다.

 

우선적으로 상세글을 보기 위한 html이 필요합니다. boardView로 명명했습니다.

<!DOCTYPE html>
<html lang="en" xmlns:th = "http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>게시글 상세 페이지</title>
</head>
<body>
<h1 th:text="${board.title}">제목입니다.</h1>
<p th:text="${board.content}">내용이 들어갈 부분입니다.</p>
</body>
</html>

이렇게 설정을 해줬고요, 연결하기 위한 controller를 구현해야겠습니다. 

@GetMapping("/board/view")//board/view?id=1
public String boardView(Model model, Integer id){
    model.addAttribute("board", boardService.boardView(id));
    return "boardView";
}

 

이제 service로 넘어가 보겠습니다. 

public Board boardView(Integer id){

    return boardRepository.findById(id).get();
}

boardView라는 함수 서비스를 제공하겠습니다. 아이디를 받아서, 우리의 레포지토리에서 id를 따라 얻어냅니다. 그럼 그걸 반환을 해주겠죠? 위의 boardView 컨트롤러 함수 내에서, id를 전달받습니다. 

 

view의 html에서

<h1 th:text="${board.title}">제목입니다.</h1>
<p th:text="${board.content}">내용이 들어갈 부분입니다.</p>

 

이 부분을 통해 데이터를 얻습니다.

 

 boardlist.html인데요,  

<tr th:each="board : ${list}">
  <td th:text="${board.id}">id</td>
  <td  ><a th:text="${board.title}" th:href="@{/board/view(id=${board.id})}"></a></td>
</tr>

href는 링크로 갈 것임을 알려줍니다. 여기서 /view? id=1 이 부분을 표현해 줍니다. 이렇게 해주면, list 페이지에서 해당 제목에 밑줄이 생기며 클릭 시 제목과 내용을 확인할 수 있습니다. 보드의 view화면으로 넘어가는데, 상세 글을 볼 수 있는 곳으로 넘어 가게 됩니다.  이러면 실제적으로 게시판이 만들어지네요. 개꿀잼입니다. 

728x90

댓글