클라이언트에서 전송한 데이터를 서버에서 사용하기위해 DTO 객체로 바꾸어야한다
package com.sparta.springtest.dto;
import com.sparta.springtest.domain.entity.Board;
import lombok.*;
import java.time.LocalDateTime;
@Getter
@Setter
@ToString
@NoArgsConstructor
public class BoardDto {
//폼데이터를 서버에서 사용하려면 객체로 만들어야하고 이를위해 DTO필요
// 클라이언트가 보낸 정보를 DTO라는것으로 만들어서 컨트롤러에 보냄
private Long id;
private String title;
public Board toEntity() { //폼데이터를 갖는 DTO를 Entity로 바꾼다
Board build = Board.builder()
.id(id)
.title(title)
.build();
return build;
}
@Builder
public BoardDto(Long id, String title) {
this.id = id;
this.title = title;
}
package com.sparta.springtest.controller;
import com.sparta.springtest.domain.entity.Board;
import com.sparta.springtest.dto.BoardDto;
import com.sparta.springtest.repository.BoardRepository;
import com.sparta.springtest.service.BoardService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
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("postList", boardDtoList); //모델(클라이언트) 에 붙힘
return "index"; //서버사이드렌더링과 비슷한 개념
}
@GetMapping("/post")
public String post() {
return "index";
}
@PostMapping("/post")
public String write(BoardDto boardDto) {
boardService.savePost(boardDto);
return "redirect:/";
}
}
package com.sparta.springtest.service;
import com.sparta.springtest.domain.entity.Board;
import com.sparta.springtest.dto.BoardDto;
import com.sparta.springtest.repository.BoardRepository;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.ArrayList;
import java.util.List;
@Service
public class BoardService {
private BoardRepository boardRepository;
public BoardService(BoardRepository boardRepository) {
this.boardRepository = boardRepository;
}
@Transactional
public Long savePost(BoardDto boardDto) {
return boardRepository.save(boardDto.toEntity()).getId();
//DB와
}
@Transactional
public List<BoardDto> getBoardList() {
List<Board> boardList = boardRepository.findAll();
List<BoardDto> boardDtoList = new ArrayList<>();
for(Board board : boardList) {
BoardDto boardDto = BoardDto.builder()
.id(board.getId())
.title(board.getTitle())
.build();
boardDtoList.add(boardDto);
}
return boardDtoList;
}
}
package com.sparta.springtest.domain.entity;
import com.sparta.springtest.domain.Timestamped;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
@Setter
@Getter // get 함수를 일괄적으로 만들어줍니다.
@NoArgsConstructor // 기본 생성자를 만들어줍니다.
@Entity // DB 테이블 역할을 합니다.
public class Board extends Timestamped {
// ID가 자동으로 생성 및 증가합니다.
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
// 반드시 값을 가지도록 합니다.
@Column(nullable = false)
private String title;
@Builder
public Board(Long id,String title) {
this.id = id;
this.title = title;
}
package com.sparta.springtest.repository;
import com.sparta.springtest.domain.entity.Board;
import org.springframework.data.jpa.repository.JpaRepository;
public interface BoardRepository extends JpaRepository<Board, Long> {
}