본문 바로가기
프로그래밍/SpringBoot

[스프링 부트 게시판] 게시판 리스트 만들기

by 소소로드 2020. 9. 30.

게시판 리스트 만들기


게시판을 만들기 전에 가장 먼저 해야할 일은 mysql에 접속해서 게시판용 테이블을 만드는 것이다.


1. 테이블 만들기


자신이 쓰는 데이터베이스는 다 다르겠지만 필드나 네임을 만드는 방법은 동일할 것이다.
내가 처음에 게시판을 만들 때 곤혹스러웠던 부분이 type을 설정하는 것이었는데
이렇게 테이블 명세를 자세히 알면 게시판을 만드는데 도움이 되지 않을까 싶다.

난 테이블 이름을 hello_board로 했는데 이 부분은 자신이 원하는대로 정하면 될 것 같다.




2. 게시판 리스트 만들기


프로젝트 구조
com.helloproject 
ㄴcontroller - BoardController 
ㄴmapper - BoardMapper 
ㄴservice - BoardService 
mapper - BoardMapper
view는 src>main>webapp>WEB-INF>views 안에 만들면 된다.
1. 폴더 생성에 대한 내용은 https://yulfsong.tistory.com/45?category=797541

2. 아래 게시판 작업에 생략한 어노테이션에 전체 부분은 https://yulfsong.tistory.com/46


Controller

1
2
3
4
5
6
7
@RequestMapping(value="/boardList")
    public String boardList(Model model) throws Exception {
        
        List<BoardVO> list = boardService.boardList();    
        model.addAttribute("list", list);
        return "boardList";
    }
cs

*

Model은 하나의 객체로 컨트롤러에서 페이지로 넘길 값을 저장하는데 사용된다.

model.addAttribute("list", list); 

이 구간은 model 객체를 파라미터로 받아서 view인 boardList에 리턴해주는 역할인데

model.addAttribute("변수 이름", 변수에 넣을 데이터); 라고 생각하면

view 단계에서 ${변수 이름}, 즉 ${list} 이렇게 받아주면 된다.


BoardService

1
2
3
public List<BoardVO> boardList() throws Exception {
        return boardMapper.boardList();
    }
cs


BoardMapper

1
public List<BoardVO> boardList() throws Exception;
cs



BoardMapper(DAO)

1
2
3
4
<select id="boardList" resultType="BoardVO">
        SELECT *
        FROM hello_board
</select>

cs


BoardVO
1
2
3
4
5
6
7
8
9
10
11
12
import java.util.Date; import lombok.Getter; import lombok.Setter;

@Setter
@Getter
public class BoardVO {
    
    private String writer; 
    private int num;
    private String title;
    private String content;
    private Date regdate;
 
}
 
cs

*
@만 붙이면 setter, getter를 편리하게 쓸 수 있는 lombok 사용법은 인터넷에 많이 나와있으며 
설치 방법도 pom.xml에 디펜던시 하나만 추가하면 될 정도로 아주 간단하다.


boardList (대문자 B 아님)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<table border="1">
    <tr>
        <th>글번호</th>
        <th>작성자</th>
        <th>제목</th>
        <th>작성시간</th>
    </tr>
    <c:forEach items="${list}" var="data">
    <tr>
        <td>${data.num}</td>
        <td>${data.writer}</td>
        <td><a href="/boardRead?num=${data.num}">${data.title}</a></td>
        <td><fmt:formatDate pattern="yyyy-MM-dd HH:mm" value="${data.regdate}"/></td>
    </tr>
    </c:forEach>
</table>

\cs

그러고보니 아까 Controller에서 사용한 model인 ${list}는 리스트 형식인데 
view에서 어떻게 뿌려주나요..? 

바로 이렇게 하면 됩니다. 
중요하지 않은 부분은 회색처리

<c:forEach>
배열 요소를 반복적으로 처리하겠다는 의미(java for문처럼)

items="${list}" var="data"
그 배열이 바로 우리가 model로 받아온 ${list}인데,
이름은 data라고 정하겠다고 명시

<td>${data.num}</td>
<td>${data.writer}</td>

그러므로 data.num은 list.num과 다름없다.
title, regdate이 뭔가가 주렁주렁 달려서 어려워보이지만
가져오는 방법은 마찬가지이며 각각 링크, 시간 출력 때문에 모양에 맞게 썼을 뿐이다.

이렇게 해서 띄웠을 때 리스트 내용이 Mysql의 테이블 내용과 일치하고

리스트 형태로 나온다면 테이블의 내용을 아주 잘 가져온 것이다.


<완성된 게시판 리스트>




전체적인 완성작은 해당 소스를 참고
github.com/yulfsong/spring-boot-hello-project

yulfsong/spring-boot-hello-project

Contribute to yulfsong/spring-boot-hello-project development by creating an account on GitHub.

github.com