본문 바로가기
🌐 Language/java

[ Java ] - JAP 기본적인 CRUD / DB-H2 (2)

by 깸뽀 2022. 10. 4.
728x90

 

🔻🔻🔻 환경설정: https://bkyungkeem.tistory.com/16

 

[ Spring Boot ] - JAP 환경 설정 / DB-H2 (1)

🔨 프로젝트 생성 인텔리제이 - Spring Initializr Type: Gradle Language: Java Java Version: 11 Type: Gradle < Dependencies > Lombok Spring Web Spring Data JPA H2 Database MySQL Driver 🔨 H2 웹콘솔 띄워보기 경로 : src > main > resource

bkyungkeem.tistory.com

 


🔨 기본적인 클래스 만들기

  • 경로 = 패키지
  • 클래스 = 클래스파일

 

경로: dto >
클래스: MemoRequestDto.java
@Getter
public class MemoRequestDto {
    private String username;
    private String contents;
}
 

 

경로: domain >
클래스: Memo.java
@NoArgsConstructor // 기본생성자를 만듭니다.
@Getter
@Entity // 테이블과 연계됨을 스프링에게 알려줍니다.
public class Memo extends Timestamped { // 생성,수정 시간을 자동으로 만들어줍니다.
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    private Long id;

    @Column(nullable = false)
    private String username;

    @Column(nullable = false)
    private String contents;

    public Memo(String username, String contents) {
        this.username = username;
        this.contents = contents;
    }

    public Memo(MemoRequestDto requestDto) {
        this.username = requestDto.getUsername();
        this.contents = requestDto.getContents();
    }
}

 

 

 

경로: request >
클래스: MemoRequestDto.java
@Getter
public class MemoRequestDto {
    private String username;
    private String contents;
}

 

경로: request >
클래스: Timestamped.java
@MappedSuperclass // Entity가 자동으로 컬럼으로 인식합니다.
@EntityListeners(AuditingEntityListener.class) // 생성/변경 시간을 자동으로 업데이트합니다.
public class Timestamped {

    @CreatedDate
    private LocalDateTime createdAt;

    @LastModifiedDate
    private LocalDateTime modifiedAt;
}

 

경로: repository >
인터페이스: MemoRepository.java
 
 
public interface MemoRepository extends JpaRepository<Memo, Long> {
    List<Memo> findAllByOrderByModifiedAtDesc();
}
 
 

 

🔨 Service 만들기

경로: service >
클래스: MemoService.java
 
 
@RequiredArgsConstructor
@Service
public class MemoService {

    private final MemoRepository memoRepository;

    @Transactional
    public Long update(Long id, MemoRequestDto requestDto) {
        Memo memo = memoRepository.findById(id).orElseThrow(
                () -> new IllegalArgumentException("아이디가 존재하지 않습니다.")
        );
        memo.update(requestDto);
        return memo.getId();
    }
}
 
 
 

🔓 findById(id) : repository에서 유일하게 구분할 수 있는 값이 id이기 때문에 id로 찾음
🔓 memo.update(requestDto): Memo.java 클래스 내부에서 update 메소드를 호출

update 기능 만들기 - Memo.java에 update 메소드 추가

1
2
3
4
public void update(MemoRequestDto requestDto) {
    this.username = requestDto.getUsername();
    this.contents = requestDto.getContents();
}
cs

 

🔨 Controller 만들기

경로: controller >

클래스: MemoController.java

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
@RequiredArgsConstructor
@RestController
public class MemoController {
 
    private final MemoRepository memoRepository;
    private final MemoService memoService;
 
    //메모 생성
    @PostMapping("/api/memos")
    public Memo createMemo(@RequestBody MemoRequestDto requestDto) {
        Memo memo = new Memo(requestDto);
        return memoRepository.save(memo);
    }
 
    //메모 조회(전체조회)
    @GetMapping("/api/memos")
    public List<Memo> getMemos() {
        return memoRepository.findAllByOrderByModifiedAtDesc();
    }
 
    //메모 수정
    @PutMapping("/api/memos/{id}")
    public Long updateMemo(@PathVariable Long id, @RequestBody MemoRequestDto requestDto) {
        memoService.update(id, requestDto);
        return id;
    }
 
    //메모 삭제
    @DeleteMapping("/api/memos/{id}")
    public Long deleteMemo(@PathVariable Long id) {
        memoRepository.deleteById(id);
        return id;
    }
}
cs

 

Postman으로 확인하기

728x90

댓글