본문 바로가기
Spring Boot/Spring Boot 입문 홍팍

[Spring boot] (15) 데이터 수정하기 (DB까지)

by 몰라닉네임 2023. 8. 7.

Mission 
수정 페이지의 데이터를 DB로 갱신하고, 이를 확인하시오

 


데이터의 수정 흐름  3단계
1. 데이터를 받고 /articles/update
 - Form 데이터가 DTO에 담겨서 Controller로 전달이되면
2. 이를 entity로 가공해서 DB에 저장한 데이터를
 - 이를 Entity로 가공해서 Repository를 통해 DB로 갱신 save() 한다.
 - 단 기존데이터가 있는경우에만 수정되어야 한다
 - 여기서 서버와의 역활 분담은 MVC가
 - DB와의 소통은 JPA가 한다.
 - DB의 관리는 SQL 언어를 통해 이루어진다.
3. show 페이지에 출력 한다.
 - 데이터가 서버에 이동되는 과정(HTTP) 간단히 알아봅시다.

 

  • 데이터가 서버로 전송되는 과정 

데이터가 서버로 전송되는 과정
클라이언트에서 서버로 데이터 전송은
다양한 통신규약은 즉 Protocol에 의해 이루어진다.

 친구한테 전화 카톡, 이메일, 쪽지 등 다양한 방식으로 연락을 하면
여기서 Protocol의 종류는
FTP(File Transfer Protocol) : 파일 전송을 위한 프로토콜
SMTP(Simple Mail Transfer Protocol) : 이메일 전송을 위한 프로토콜
SSH(Secure Shell) : 원격지 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜 등 이 있다.
기기와 목적에 따라 다양하다
웹 서비스에서 사용하는 프로토콜이 바로 HTTP(Hyper Text Transfer Protorol)이다.
HTTP는 다양한 요청을 메소드르 통해 보낸다.
대표적인 메소드로 GET(read), POST(create), PATCH/PUT(update), DELETE(Delete)가 있다.

 

               http        SQL
Create    Post       Insert
Read      Get        Select
Update   Patch     Update
Delete    Delete    Delete

-실습개요
수정 페이지에서 데이터 변경 시 수정된 데이터 페이지가 나올 수 있도록 구현

-더미 데이터 설정 
매번 데이터 입력하는게 귀찮아서, 더미데이터를 자동으로 생성할 수 있게 코드 작성
/resources/data.sql 파일 생성
Insert INTO article(id, title, content) VALUES (1, 'aaa', '1111');
Insert INTO article(id, title, content) VALUES (2, 'bbb', '2222');
Insert INTO article(id, title, content) VALUES (3, 'ccc', '3333');
더미데이터 Insert 

form 태그는 get과 post 만 지원..

-수정 폼 받기
@PostMapping("/articles/update")
    public  String update(ArticleForm form){
        
        return "";
    }


-Dto 변경 /dto/ArticleForm
private Long id;
public Article toEntity() {
        return new Article(id, title, content);
    }

-컨트롤러 처리 개요
1) DTO를 엔티티로 변환한다.
2) 엔티티를 DB로 저장한다.

(2-1 : DB에 기존 데이터를 가져온다.)
3) 수정 결과 페이지로 리다이렉트 한다.

1)DTO를 엔티티로 변경
Article articleEntity = form.toEntity();

 

dto/ArticleForm이 무엇을 하는 .java 파일?
ArticleForm 객체를 가지고.
    private Long id;
    private String title;
    private String content;

    public Article toEntity() {
        return new Article(id, title, content);
        //반환해줌 뭐를? Article entity 객체
    }
Article 객체를 return 해주는 파일.

 

 


-기존 엔티티를 수정 

 

 2: 엔티티를 DB로 저장한다

(2-1 : DB에 기존 데이터를 가져온다.)


Article target = articleRepository.findById(articleEntity.getId()).orElse(null)
- > article레파지토리가 id값을 통해 데이터를 가져오는데 만약에 없다면 null 을 리턴해라.
타켓이라는 변수에 데이터가 있다면 article엔티티가 연결될 것이다. 

 

 2: 엔티티를 DB로 저장한다
(2-2 : 기존 데이터에 값을 갱신한다.!)
if (target != null) {
            articleRepository.save(articleEntity); // 엔티티가 DB로 갱신

-수정된 데이터 확인
http://localhost:8080/h2-console 로 들어가서 데이터 확인
select * from ARTICLE;

-결과 화면으로 리다이렉트
return "redirect:/articles/" + articleEntity.getId(); //id 값을 가져옴 

-SQL로 데이터 수정하기

 

특정 대상을 바꾸고 싶을 때는 where 절 추가

UPDATE ARTICLE
SET
 title =  'changed by sql',
 content = 'changed by sql'
WHERE 
 id=2 ;

 

 

 

🔥 구글링 훈련하기

  • jpa data.sql 사용법
  • jpa defer-datasource-initialization
  • 인텔리제이 한글 깨짐

 

내용참고

https://www.youtube.com/channel/UCpW1MaTjw4X-2Y6MwAVptcQ