수정을 했으니 삭제 구현을 해봅시다 삭제는 엄청 간단하게 구현이 가능합니다.
첫번째 구현은 상세페이지 에서 시작해야합니다.
프론트(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/";
}
- @PathVariable 로 id 값을 가져옵니다.
- 서비스에 구현한 delete 메소드를 호출합니다.
- 삭제를 완료하면 리턴값으로 게시글 목록으로 가도록 설정 했습니다.
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);
}
}
- 레포지 토리에 deleteById 를 호출해서 id 값을 입력한것을 삭제 시키는것을 구현했습니다 엄청 간단합니다
그냥 데이터 삭제는 뭘 변환하고 이런걸 할필요없이 그냥 간단하게 삭제 시키는걸 하나 부르면 끝입니다.
삭제 버튼 눌러서 삭제 했습니다.
'Spring > 게시판 CRUD + 추가기능들' 카테고리의 다른 글
회원가입 기능 구현 (0) | 2023.04.01 |
---|---|
게시글 페이징 (0) | 2023.03.30 |
게시글 수정 (0) | 2023.03.29 |
게시글 상세조회 (0) | 2023.03.28 |
게시글 목록 (0) | 2023.03.28 |