Java

SpringBoot 공부 - CRUD(Update)

Baetab 2023. 4. 27. 16:36

상세페이지 에 수정 링크 걸기

show.mustache 에 a태그로 링크를 걸어줌

<a href="/articles/{{article.id}}/edit">수정</a>

class="btn btn-primary"추가해서 버튼도 만들어줬다

 

 

수정 버튼 동작 컨트롤러 만들기

ArticleController.java 에 edit() 메서드 추가

 

@GetMapping("/articles/{id}/edit")
    public String edit(@PathVariable Long id , Model model){  //id를 매개변수로 받아오기 , 모델등록
        Article articleEntity = articleRepository.findById(id).orElse(null); //DB에서 수정할 데이터 가져오기
        model.addAttribute("article",articleEntity); // articleEntity를 article 로 등록

        return "articles/edit";
    }

 

수정 폼 만들기

templates > articles 에 edit.mustache 를 만든다 new.mustache 와 구조가 같으니 복붙하고 약간만 수정한다

{{>layouts/header}}

<form  method="post" class="container">
    <div class="mb-3">
        <label class="form-label">제목</label>
        <input type="text" class="form-control" name="title" value="{{article.title}}">
    </div>
    <div class="mb-3">
        <label class="form-label">내용</label>
        <textarea class="form-control" row="3" name="content"> {{article.content}}</textarea>

    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
    <a href="/articles/{{article.id}}" class="btn btn-primary">뒤로가기</a>
</form>

{{>layouts/footer}}

 

서버 재시작후 글하나 작성하고 목록중 눌러서 -> 수정 버튼을 눌러보면

요렇게 제목하고 내용 다 잘 출력됨

 

더미데이터 만들기

서버 재시작할때마다 게시글 만들기 번거로우니 더미데이터를 넣어줬다

application.properties 에 코드 한줄 추가해주고

spring.jpa.defer-datasource-initialization=true

resource 폴더에 data.sql 하나 만들어서

INSERT INTO article(id, title, content) VALUES(1, '가가가가'. '1111')
INSERT INTO article(id, title, content) VALUES(2, '나나나나'. '2222')
INSERT INTO article(id, title, content) VALUES(1, '다다다다'. '3333')

SQL  구문으로 더미데이터를 넣어준다

 

서버를 재시작 해고 /articles 로 접속해보면 정상적으로 더미 데이터가 들어가있다

 

수정 페이지 변경하기

폼태그에 액션 속성 추가하고 

action="/articles/update

hidden 속성으로 id 값을 보내주는 태그를 바로 밑에 추가해준다

<input name="id" type="hidden" value="{{id}}">

 

update()메서드 만들기

일단 ArticleForm 에서 id 도 받기 때문에 dto > ArticleForm 에 id 필드를 추가해준다

private Long id; //아이디 받을 필드

return 값에 null 로 넣어둔값도 id 로 변경해준다

public Article toEntity(){
return new Article(id,title,content);
}

 

ArticleCotroller.java 에 update() 메서드를 작성한다

@PostMapping("/articles/update")
public String update(ArticleForm form){
log.info(form.toString());

return "";
}

테스트를 위해 log 코드를 작성해서 서버를 재시작후 

수정페이지에서 게시글 수정후 확인해보았다

정상적으로 수정되는것이 확인되었다

 

DB에 저장하고 결과 페이지로 리다이렉트

//1.DTO 를 엔티티로 변환하기

//2.엔티티를 DB로 저장하기

//3.수정 결과 페이지로 리다이렉트하기
@PostMapping("/articles/update")
    public String update(ArticleForm form){
        log.info(form.toString());
        //1.DTO 를 엔티티로 변환하기
        Article articleEntity = form.toEntity();
        log.info(articleEntity.toString());
        //2.엔티티를 DB로 저장하기
        Article target=articleRepository.findById(articleEntity.getId()).orElse(null);
        if (target!=null){
            articleRepository.save(articleEntity); // 엔티티를 DB에 저장(갱신)
        }
        //3.수정 결과 페이지로 리다이렉트하기
        return "redirect:/articles"+articleEntity.getId();
    }

서버 재시작후 수정해보면 정상적으로 반영후 결과물이 표시된다

'Java' 카테고리의 다른 글

REST API 와 JSON  (0) 2023.04.30
SpringBoot 공부 - CRUD ( Delete )  (0) 2023.04.28
SpringBoot 공부 - 게시판 내 페이지 이동  (0) 2023.04.27
SpringBoot 공부 - CRUD (Read - 2)  (0) 2023.04.26
SpringBoot 공부 - CRUD (Read - 1)  (0) 2023.04.25