본문 바로가기
Spring/게시판 CRUD + 추가기능들

게시판 삭제

by chogigang 2023. 3. 29.

수정을 했으니 삭제 구현을 해봅시다 삭제는 엄청 간단하게 구현이 가능합니다.

 

 

첫번째 구현은 상세페이지 에서 시작해야합니다.

 

 

프론트(html) -> 서비스->컨트롤러

이 순서가 맞는거 같지만 좀더 이해하기 쉽게 컨트롤러 ->서비스로 구현해  봅시다.

 

detial.html

  const deleteReq = () => {
        console.log("삭제 요청");
        const id = [[${board.id}]];
        location.href = "/board/delete/" + id;
    }

</script>
</html>

이부분 기억 하실겁니다.

 

그다음은 컨트롤러로 갑시다.

 

BoardController

package cho.boardplus.controller;

import cho.boardplus.dto.BoardDTO;
import cho.boardplus.service.BoardService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@RequiredArgsConstructor
@RequestMapping("/board")
@Controller
public class BoardController {

    private final BoardService boardService;


    //메인페이지
    @GetMapping("/index")
    public String index() {

        return "index";
    }

    //글 작성 페이지
    @GetMapping("/save")
    public String writeForm() {
        return "save";
    }


    // 글작성 컨트롤러
    @PostMapping("save")
    public String save(@ModelAttribute BoardDTO boardDTO) {
        System.out.println("boardDTO = " + boardDTO);
        boardService.save(boardDTO);
        return "index"; //index 로 변경

    }


    // 게시글 목록
    @GetMapping("/")
    public String findAll(Model model) {
        // DB에서 전체 게시글 데이터를 가져와서 list.html에 보여준다.
        List<BoardDTO> boardDTOList = boardService.findAll();
        model.addAttribute("boardList", boardDTOList);
        return "list";
    }
//게시글 조회
        @GetMapping("/{id}")
        public String findById(@PathVariable Long id, Model model){
            boardService.updateHits(id);
            BoardDTO boardDTO =boardService.findById(id);
            model.addAttribute("board",boardDTO);
            return "detail";
        }


        //게시글 수정
@GetMapping("/update/{id}")
    public String updateForm(@PathVariable Long id,Model model) {
        BoardDTO boardDTO = boardService.findById(id);
            model.addAttribute("boardUpdate",boardDTO);
            return "update";

}       //게시글 수정
    @PostMapping("/update")
    public String update(@ModelAttribute BoardDTO boardDTO, Model model){
        BoardDTO board = boardService.update(boardDTO);
        model.addAttribute("board", board);
        return "detail";
      //  return "redirect:/board/"+ boardDTO.getId(); // 이것도 가능
}
    //게시글 삭제
        @GetMapping("/delete/{id}") //추가
        public String delete(@PathVariable Long id){
        boardService.delete(id);
        return "redirect:/board/";
}

 

  1. @PathVariable 로 id 값을 가져옵니다.
  2. 서비스에 구현한 delete 메소드를 호출합니다.
  3. 삭제를 완료하면 리턴값으로 게시글 목록으로 가도록 설정 했습니다.

boardservice 단으로 가서 delete 를 구현하로 갑시다.

 

BoardService 

package cho.boardplus.service;

import cho.boardplus.repository.BoardRepository;
import cho.boardplus.dto.BoardDTO;
import cho.boardplus.entity.BoardEntity;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;


//DTO -> Entity  (Entity Class)
//Entity -> DTO (DTO Class)

@Service
@RequiredArgsConstructor
public class BoardService {

    private final BoardRepository boardRepository;

    //작성
    public void save(BoardDTO boardDTO) {
        BoardEntity boardEntity = BoardEntity.toSaveEntity(boardDTO);
        boardRepository.save(boardEntity);

    }

    public List<BoardDTO> findAll() {//파인드 올은 대부분 엔티티 한태서 온다.
        List<BoardEntity> boardEntityList = boardRepository.findAll();
        List<BoardDTO> boardDTOList = new ArrayList<>();
        for (BoardEntity boardEntity : boardEntityList) {
            boardDTOList.add(BoardDTO.toBoardDTO(boardEntity));
        }
        return boardDTOList;

    }

    // 게시글 조회수
    @Transactional
    public void updateHits(Long id) {
        boardRepository.updateHits(id);
    }


    //게시글 상세조회
    @Transactional
    public BoardDTO findById(Long id) {
        Optional<BoardEntity> optionalBoardEntity = boardRepository.findById(id);
        if (optionalBoardEntity.isPresent()) {
            BoardEntity boardEntity = optionalBoardEntity.get();
            BoardDTO boardDTO = BoardDTO.toBoardDTO(boardEntity);
            return boardDTO;
        } else {
            return null;
        }
    }

    //게시글 수정
    public BoardDTO update(BoardDTO boardDTO) {
        BoardEntity boardEntity = BoardEntity.toUpdateEntity(boardDTO);
        boardRepository.save(boardEntity);
        return findById(boardDTO.getId());
    }

    //게시글 삭제
    public void delete(Long id) { //추가
boardRepository.deleteById(id);

    }
}

 

  1. 레포지 토리에 deleteById 를 호출해서 id 값을 입력한것을 삭제 시키는것을 구현했습니다 엄청 간단합니다
    그냥 데이터 삭제는 뭘 변환하고 이런걸 할필요없이 그냥 간단하게 삭제 시키는걸 하나 부르면 끝입니다.

 

 

삭제 버튼 눌러서 삭제 했습니다. 

 

 

'Spring > 게시판 CRUD + 추가기능들' 카테고리의 다른 글

회원가입 기능 구현  (0) 2023.04.01
게시글 페이징  (0) 2023.03.30
게시글 수정  (0) 2023.03.29
게시글 상세조회  (0) 2023.03.28
게시글 목록  (0) 2023.03.28