본문 바로가기

⭐ SpringBoot/SpringBoot + CRUD

[UPDATE] 특정 폼에서 데이터를 업데이트 하는 프로세스

반응형

1. 리스트 화면에서 리스트 내용을 클릭하고 들어가면 아래와 같은 화면이 나온다.

2. 여기서 Edit를 클릭했을때의 흐름을 살펴보면 아래와 같다.

3. 코드의 흐름을 보면 아래와 같다.

//    화면에서 Edit 버튼을 눌렀을때 나오는 값이 입력된 화면이다.
    @GetMapping("/articles/{id}/edit")
    public String edit(@PathVariable Long id, Model model) {

        // 수정할 데이터를 가져오기
        Article articleEntity = articleRepository.findById(id).orElse(null);

        // 모델에 데이터를 등록하기
        model.addAttribute("article", articleEntity);

        // 뷰페이지 edit.mustache로 값을 리턴한다.
        return "articles/edit";
    }

- articleEntity 가 어떤 데이터를 받아 오는지 System.out.println()으로 찍어보면 아래와 같다.

값을 확인해보면 articleEntity데이터값은 이것이다Article(id=1, title=가가가가가, content=11111) 와 같은데 이것은 id값을 기준으로 해당 id값의 데이터를 모두 SELECT 하여 가져 왔다.

4. 그리고 가져온값을 모델에 등록하고 등록된 값을 articles/edit로 리턴해준다.

        // 모델에 데이터를 등록하기
        model.addAttribute("article", articleEntity);

        // 뷰페이지 edit.mustache로 값을 리턴한다.
        return "articles/edit";

5. articles/edit의 페이지를 보면 아래와 같다.

/articles/{id}/edit에서 던진값을 아래의 id, title, content에서 받아서 화면에 뿌려준다.

- 아래와 같은 화면이 나타나게 된다. 여기서 데이터를 수정하고 제출을 클릭하면 /articles/update 메소드를 호출하고 해당 메소드로 값을 넘긴다.

6. /articles/update 메소드의 내용을 보면 아래와 같다.

0. PostMapping을 통한 데이터를 INSERT(UPDATE) 작업을 한다. ArticleForm form에서 edit에서 던진값을 받아온다.

1. DB에 저장하기 위해 받아온 form데이터를 entity로 변환한다.

2-1. 그리고 DB에서 기존 데이터를 가져오고,

2-2. 기존 데이터가 존재한다면 save를 통해 값을 갱신한다.

3. 수정된 결과 값을 return "redirect:/articles/" + articleEntity.getId(); 로 리다이렉트 한다.

- 리 다이렉트 된 URL값을 아래와 같다.

http://localhost:8080/articles/2
    @PostMapping("/articles/update") //edit.mustache에서 던진 값
    public String update(ArticleForm form) {
        log.info(form.toString());

        // 1.DTO를 엔티티로 변환한다.
        Article articleEntity = form.toEntity();
        log.info(articleEntity.toString());

        // 2.엔티티를 DB로 저장한다.

        //2-1:DB에서 기존 데이터를 가져온다.
        Article target = articleRepository.findById(articleEntity.getId()).orElse(null);

        //2-2:기존 데이터가 있다면!!, 값을 갱신한다.
        if (target != null) {
            articleRepository.save(articleEntity); //엔티티가 DB로 갱신 된다.
        }

        // 3.수정 결과 페이지로 리 다이렉트 한다.
        return "redirect:/articles/" + articleEntity.getId();
    }

여기까지 특정 폼에 데이터를 받아 해당 데이터를 갱신하고 업데이트 하는 과정을 수행 하였다.

반응형