728x90
반응형
Spring Boot + H2 Database + JPA + Thymeleaf 을 활용해
간단한 게시판을 작성해보고자 합니다.
오늘 다룰 내용은 게시판 글 작성 기능입니다.
글에 포함된 기초 개념
- Get Mapping / Post Mapping 차이
- Spring annotation - @Transactional
* 개발환경 Spring Boot : 2.4.3 Java 11 Thymeleaf Maven War Lombok |
①
List.html에 글쓰기 버튼 추가
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="contents">
<a th:href="@{/write}">글쓰기</a>
<table>
<thead>
<tr>
<th class="one wide">번호</th>
<th class="ten wide">글제목</th>
<th class="two wide">작성자</th>
<th class="three wide">작성일</th>
</tr>
</thead>
<tbody>
<!-- CONTENTS !-->
<tr th:each="board, index : ${boardList}">
<td>
<span th:text="${index.index}"></span>
</td>
<td>
<a th:href="@{'/list/' + ${board.id}}">
<span th:text="${board.title}"></span>
</a>
</td>
<td>
<span th:text="${board.writer}"></span>
</td>
<td>
<span th:text="${#temporals.format(board.createdDate, 'yyyy-MM-dd HH:mm')}"></span>
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
②
List.html에서 글쓰기 버튼 클릭 시, 이동할 페이지 작성
form을 통해 Post 방식으로 데이터 전달
이때, 추후에 로그인기능을 추가하기 위해서는 th:action으로 넘기거나, csrf token 을 넘긴다
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form th:action="@{/write}" method="post">
제목 : <input type="text" name="title"> <br>
작성자 : <input type="text" name="writer"> <br>
<textarea name="content"></textarea><br>
<input type="submit" value="등록">
</form>
</body>
</html>
③
Controller에 글 작성 관련 메소드 추가
list.html 에서 글쓰기 버튼 클릭 시, Get 방식으로 write.html 로 이동
write.html 에서 등록 버튼 클릭 시, Post 방식으로 오브젝트를 전달받아,
전달받은 오브젝트를 저장 후 메인페이지로 이동
package com.example.demo.controller;
import com.example.demo.dto.BoardDto;
import com.example.demo.service.BoardService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@Controller
public class BoardController {
private BoardService boardService;
public BoardController(BoardService boardService){
this.boardService = boardService;
}
@GetMapping("/")
public String list(Model model){
List<BoardDto> boardDtoList = boardService.getBoardList();
model.addAttribute("boardList", boardDtoList);
return "list.html";
}
@GetMapping("/write")
public String write(){
return "write.html";
}
@PostMapping("/write")
public String write(BoardDto dto) {
boardService.savePost(dto);
return "redirect:/";
}
}
④
Service에 글 작성시, 저장할 메소드 추가
Spring의 @Transactional 어노테이션을 추가하여 하나의 단위로 실행되도록 작성
package com.example.demo.service;
import com.example.demo.domain.entity.Board;
import com.example.demo.domain.repository.BoardRepository;
import com.example.demo.dto.BoardDto;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Service
public class BoardService {
private BoardRepository boardRepository;
public BoardService(BoardRepository boardRepository){
this.boardRepository = boardRepository;
}
@Transactional
public void savePost(BoardDto boardDto){
boardRepository.save(boardDto.toEntity()).getId();
}
@Transactional
public List<BoardDto> getBoardList(){
List<Board> boards = boardRepository.findAll();
List<BoardDto> boardDtoList = new ArrayList<>();
for(Board board : boards){
BoardDto dto = BoardDto.builder()
.id(board.getId())
.title(board.getTitle())
.content(board.getContent())
.writer(board.getWriter())
.createdDate(board.getCreatedDate())
.build();
boardDtoList.add(dto);
}
return boardDtoList;
}
}
728x90
반응형
'Web 개발 > 게시판 만들기' 카테고리의 다른 글
[Spring Boot/JPA] 게시판을 통해 MVC, CRUD 연습하기 5 - 삭제 (0) | 2021.06.28 |
---|---|
[Spring Boot/JPA] 게시판을 통해 MVC, CRUD 연습하기 4 - 수정 (0) | 2021.06.28 |
[Spring Boot/JPA] 게시판을 통해 MVC, CRUD 연습하기 3 - 상세보기 (0) | 2021.02.16 |
[Spring Boot/JPA] 게시판을 통해 MVC, CRUD 연습하기 1 - 목록 (0) | 2021.02.08 |
[Spring Boot] 프로젝트 생성하는 방법 ( IntelliJ, SpringBoot, JPA, H2 DB ) (0) | 2021.02.03 |