스프링 부트(Spring Boot) 게시판

심형철·2022년 1월 14일
0

스프링부트 게시판(board)

오늘은 게시판을 총 정리하면서
기능의 흐름부터 사용된 매서드 등의 역할 등을
하나하나 세세히 파볼 예정이다.


복습하는 느낌으로, 처음부터 진행할 예정인만큼
오래 걸리겠지만 세세하고 자세하게 적어보자....


Save(글 작성)

controller

// 세이브 주소로 요청하는 매서드
@Getmapping("save")
public String saveForm(){
return "board/save";
}
// 세이브(글쓰기) 를 진행하는 메서드
@Postmapping("save")
public String save(@ModelAttribute BoardSaveDTO boardSaveDTO){
        Long boardId = bs.save(boardSaveDTO);
        return "redirect:/board/";
    }

ModelAttribute 는 자동으로 객체를 생성해주는 어노테이션입니다.
위 코드를 읽어면 saveForm 의 경우 save 주소로 보내주는 역할입니다.

그럼 save는 작성된 값을 담아 서비스로 리턴해주는 역할을 가지고있는데
ModelAttribute 을 이용해 BoardSaveDTO 클래스의 boardSaveDTO라는
객체를 생성해 사용할 수 있게 해주며, HTTP로 넘어온 값을 자동으로 바인딩 해 줍니다.

즉 Long으로 선언한 boardId 안에 bs.save(boardSaveDTO)값을 담아주고 자동으로 넘어오는 값들(작성자,제목,비밀번호 등)을 해당 변수를 묶어줍니다.

service

    @Override
    public Long save(BoardSaveDTO boardSaveDTO) {
        BoardEntity boardEntity = BoardEntity.toSaveEntity(boardSaveDTO);
        return br.save(boardEntity).getId();
    }

해당 메서드는 리파지토리로 넘겨주기 전에 DTO값을 Entity 변경해줘야 하는 부분을 담당하는데,
BoardEntity 라는 클래스의 boardEntity 객체를 생성해
BoardEntity.toSaveEntity(boardSaveDTO) 를 담아
리파지토리로 보내준다.

  • BoardSaveDTO
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class BoardSaveDTO {
       private String boardWriter;
       private String boardPassword;
       private String boardTitle;
       private String boardContents;
       private LocalDateTime boardDate;
    }
BoardSaveDTO - 글 작성 시 필요한 값들을 필드로 선언한다..

  • 글 상세조회

controller

    @GetMapping("/")
    public String findAll(Model model){
        List<BoardDetailDTO> boardList = bs.findAll();
        model.addAttribute("boardList",boardList);
        return "board/findAll";
    }

전체 값을 출력해야하기 때문에 정보들을 가져온다(Get)
Model 타입의 객체를 선언해 파라미터로 받아줍니다.

List<BoardDetailDTO>

를 사용해 boardList = bs.findAll(); 값을 boardList에 담아주고 addAttribute로 모델에 값을 담아줍니다.
리턴값은 당연히 findAll으로~~~

ServiceImpl

    @Override
  public List<BoardDetailDTO> findAll() {
      List<BoardEntity> boardEntityList = br.findAll();
      List<BoardDetailDTO> boardList = new ArrayList<>();
      for (BoardEntity boardEntity : boardEntityList){
          boardList.add(BoardDetailDTO.toBoardDetailDTO(boardEntity));
      }
      return boardList;
  }
List<BoardDetailDTO>

이건 가져오는거니까....
br.findAll(); 을 List로 선언한 boardEntityList 에 담아주고!
List로 선언한 boardList 에 값을 담아서 리턴해야하는데....
전부 출력해야하는거니까 값을 모두 찍어야지...
for each 문을 사용해서

for (BoardEntity boardEntity : boardEntityList){
            boardList.add(BoardDetailDTO.toBoardDetailDTO(boardEntity));
        }

으로 boardEntity에 담긴 값을 BoardDetailDTO에 담고 그 값을 또
boardList에 담아서 리턴해주면~~끝
물론 toBoardDetailDTO 를 DTO에 선언해줘야 값을 가져올수 있으니까~
BoardDetailDTO

@Data
@AllArgsConstructor
@NoArgsConstructor
public class BoardDetailDTO {
   private Long boardId;
   private String boardWriter;
   private String boardPassword;
   private String boardTitle;
   private String boardContents;
   private LocalDateTime boardTime;
public static BoardDetailDTO toBoardDetailDTO(BoardEntity boardEntity){
       BoardDetailDTO boardDetailDTO = new BoardDetailDTO();
       boardDetailDTO.setBoardId(boardEntity.getId());
       boardDetailDTO.setBoardWriter(boardEntity.getBoardWriter());
       boardDetailDTO.setBoardPassword(boardEntity.getBoardPassword());
       boardDetailDTO.setBoardTitle(boardEntity.getBoardTitle());
       boardDetailDTO.setBoardContents(boardEntity.getBoardContents());));
       if(boardEntity.getUpdateTime()==null){
           boardDetailDTO.setBoardTime(boardEntity.getCreateTime());
       }else {
           boardDetailDTO.setBoardTime(boardEntity.getUpdateTime());
       }
   }
}

길긴 한데...... 어차피 값을 다 담아줘야 하니까 악으로 깡으로 써야한다....

profile
열심히 하려고 합니다.

0개의 댓글

관련 채용 정보