코딩기록 저장소 🐕/스스로 프로젝트와 연습

CRUD 연습

kimkongmom 2023. 10. 22. 19:03

 

 

 

 

 

 

oracle에 문제로 포맷후 다시실행하고 고난과 역경의 순간들이었습니다..

오라클 21c 설치후 sqldeveloper 설치 localhost를 IP 주소로 바꿔서 해줘야 성공이뜹니다..

 

쿼리문을 돌린후 위에 나와있는 제시사항 코드로 짜보기

 

 

 

① 우선 첫번째로 위에 켜자마자 주소가 list.do로 나오게 하기 위해서 redirect로 return 해주었습니다.

MvcController

 

1
2
3
4
5
6
7
8
9
10
 
@Controller
public class MvcController {
 
  @GetMapping(value="/")
  public String list() {
    return "redirect:/board/list.do";
  }
  
}
cs

 

②  그다음으로 mapper.xml을 해줍니다 mybatis를 사용 데이터베이스와 연결해주시위해서 작성해줍니다.

getBoard는 상세보기를 하기위해 쿼리를 조회합니다

addBoard는  새글작성을 한후 글이 저장되게 추가해줍니다

getBoardList는 첫화면에서 목록을 보여주기위한 조회입니다.

delete는 삭제 쿼리

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<mapper namespace="com.gdu.exam.dao.BoardMapper">
 
 
  <select id="getBoard" parameterType="int" resultType="BoardDto">
    SELECT BOARD_NO, AUTHOR, TITLE, CONTENT, HIT, IP, POSTDATE
      FROM MVC_BOARD_T
     WHERE BOARD_NO = #{boardNo}
  </select>
 
  <insert id="addBoard" parameterType="BoardDto">
    INSERT INTO MVC_BOARD_T (
        BOARD_NO
      , AUTHOR
      , TITLE
      , CONTENT
    ) VALUES (
        MVC_BOARD_SEQ.NEXTVAL
      , #{author}
      , #{title}
      , #{content}
    )
  </insert>
 
  <select id="getBoardList" resultType="BoardDto">
    SELECT BOARD_NO, AUTHOR, TITLE, HIT, POSTDATE
      FROM MVC_BOARD_T
     ORDER BY BOARD_NO DESC
  </select>
  
   <delete id="delete" parameterType="int">
       DELETE FROM MVC_BOARD_T WHERE BOARD_NO = #{boardNo}
   </delete>
</mapper>
 
cs

 

 

 

③ interface BoardMapper

 각각 데이터베이스에서 수행할 작업을 정의합니다. 연결한 데이터베이스를 실행해주기위한 코드입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.gdu.exam.dao;
 
import java.util.List;
 
import org.apache.ibatis.annotations.Mapper;
 
import com.gdu.exam.dto.BoardDto;
 
@Mapper
public interface BoardMapper {
    public BoardDto getBoard(int boardNo);
    public int addBoard(BoardDto boardDto);
    public List<BoardDto> getBoardList();
    public int delete(int boardNo);
 
}
cs

 

④ 비지니스 로직 정의 서비스 계층 BoardService

dao와 controller 중간계층역할

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.gdu.exam.service;
 
import java.util.List;
 
 
 
import com.gdu.exam.dto.BoardDto;
 
public interface BoardService {
    public BoardDto getBoard(int boardNo);
    public int addBoard(BoardDto boardDto);
    public List<BoardDto> getBoardList();
    public int delete(int boardNo);
}
cs

 

⑤ 서비스 구현

addBoard(BoardDto boardDto) -> BoardDto 객체를 이용하여 데이터베이스에 새로운 게시글을 추가합니다.

getBoardList() -> 목록조회 List로 받습니다.

getBoard(int boardNo)-> 게시글 번호를 이용하여 해당 게시글의 정보를 조회하여 반환합니다.

delete(int boardNo) -> 게시글 번호로 삭제요청

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@RequiredArgsConstructor 
@Service
public class BoardServiceImpl implements BoardService {
    
    private final BoardMapper boardMapper;
    
    @Override
    public int addBoard(BoardDto boardDto) {
        return boardMapper.addBoard(boardDto);
    }
 
    @Override
    public List<BoardDto> getBoardList() {
        return boardMapper.getBoardList();
    }
 
    @Override
    public BoardDto getBoard(int boardNo) {
        return boardMapper.getBoard(boardNo);
    }
 
    @Override
    public int delete(int boardNo) {
        return boardMapper.delete(boardNo);
    }
 
    
}
cs

 

 

⑥ controllerd

HTTP 요청을 처리하고, 해당 요청에 따라 비즈니스 로직을 실행하며, 화면으로 데이터를 전달하는 역할을 합니다.

add(BoardDto boardDto, RedirectAttributes redirectAttributes) ->

boardDto 객체를 사용하여 게시글을 추가하고, addResult 값을 redirectAttributes에 추가하여 추가 결과를 

다음 요청으로 전달합니다. 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@RequiredArgsConstructor
@Controller
public class BoardController {
    
   
   private final BoardService boardService;
    
   @GetMapping(value="/board/list.do")
   public String list(Model model) {
     List<BoardDto> boardList = boardService.getBoardList();
     model.addAttribute("boardList", boardList);
     return "board/list";
   }
   
   @GetMapping(value="/board/write.do")
   public String write() {
       return "board/write";
   }
   @PostMapping(value="/board/insert.do")
   public String add(BoardDto boardDto
                    , RedirectAttributes redirectAttributes) {
     int addResult = boardService.addBoard(boardDto);
     redirectAttributes.addFlashAttribute("addResult", addResult);
     return "redirect:/board/list.do";
   }
   @GetMapping(value="/board/detail.do")
   public String detail(@RequestParam int boardNo, Model model) {
     BoardDto boardDto = boardService.getBoard(boardNo);
     model.addAttribute("board", boardDto);
     return "board/detail";  
   }
   @GetMapping("/board/delete.do")
   public String delete(@RequestParam int boardNo, RedirectAttributes redirectAttributes) {
       int deleteResult = boardService.delete(boardNo);
       redirectAttributes.addFlashAttribute("deleteResult", deleteResult);
       return "redirect:/board/list.do";
   }
 
}
cs