관리 메뉴

bright jazz music

guestbook : 03. 자동 일자/시간 처리(등록/수정 등) +Querydsl (2) 본문

Framework/Spring

guestbook : 03. 자동 일자/시간 처리(등록/수정 등) +Querydsl (2)

bright jazz music 2022. 6. 30. 22:32

이전글: 2022.06.29 - [JAVA/Spring] - guestbook : 03. 자동 일자/시간 처리(등록/수정 등) +Querydsl (1)

 

1 . 엔티티 setter 기능 만들기(수정 시간 테스트)

엔티티 클래스는 가능하면 setter관련 기능을 만들지 않기를 권장한다. 엔티티 객체가 애플리케이션 내부에서 변경되면 JPA를 관리하는 쪽이 복잡해질 수 있기 때문이다. 따라서 수정 최소화가 권장된다. 그러나 필요에 따라서 수정기능을 만들 수도 있다.

 

Guestbook 클래스의 title과 content를 수정할 수 있도록 해당 클래스에 changeTitle()과 changeContent() 메서드를 추가하자.

//Guestbook.java

package com.example.guestbook.entity;


import lombok.*;

import javax.persistence.*;


@Entity // * 엔티티로 선언하지 않으면 Qdomain이 생성되지 않는다.
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Guestbook extends BaseEntity{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long gno;

    @Column(length = 100, nullable = false)
    private String title;

    @Column(length = 1500, nullable = false)
    private String content;

    @Column(length = 50, nullable = false)
    private String writer;
    
    public void changeTitle(String title){ // <== 방명록 제목 수정을 위해 추가
        this.title = title;
    }
    
    public void changeContent(String content) {// <== 방명록 내용 수정을 위해 추가
        this.content = content;    }


}

 

Guestbook클래스가 상속하는 클래스인 BaseEntity에는 modDate라는 속성이 존재한다(이전글 참조). 이 속성은 최종 수정시간이 반영되기 때문에 특정 엔티티를 수정하고 save() 했을 경우에만 수정내역이 반영된다. 

2 . setter 기능 테스트 (수정 메서드 테스트를 위한 테스트 코드 작성)

//GuestbookRepositoryTests.java

package com.example.guestbook.repository;

import com.example.guestbook.entity.Guestbook;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Optional;
import java.util.stream.IntStream;

@SpringBootTest
public class GuestbookRepositoryTests {

    @Autowired
    private GuestbookRepository guestbookRepository; //의존성 주입

    @Test
    public void insertDummies(){
        //테스트 데이터 300개 입력
        IntStream.rangeClosed(1, 300).forEach(i -> {
            Guestbook guestbook = Guestbook.builder()
                    .title("Title...." + i)
                    .content("Content..." + i)
                    .writer("user" + (i %10))
                    .build();

            System.out.println(guestbookRepository.save(guestbook));
        });

    }

    @Test //<== guestbook 업데이트 테스트를 위해 추가
    public void updateTest(){
        Optional<Guestbook> result = guestbookRepository.findById(300L);
        // DB에 존재하는 번호인 300번으로 테스트
        //Optional : If non-null, the value; if null, indicates no value is present.
        // isPresent() 또는 isEmpty()로 확인.

        System.out.println("result.isPresent())="+ result.isPresent());

        if(result.isPresent()) {
            Guestbook guestbook = result.get();
            guestbook.changeTitle("Change Title!!!!!!!!!!!!!!!");
            guestbook.changeContent("change content!!!!!!!!!!!!!!!");

            guestbookRepository.save(guestbook);
        }
    }
}

작성을 완료했으면 해당 테스트 코드(updateTest()) 실행.

콘솔

 

guestbook 테이블의 칼럼 값이 변경되었다.

Comments