Spring

Spring 3주차(나만의 메모장 CRUD)

임기웅변 2021. 9. 25. 12:23

- API 설계하기

- memo 생성

테이블과 연결되는 클래스 , repository는 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();
}
}

 

MemoRepository.java

public interface MemoRepository extends JpaRepository<Memo, Long> {
List<Memo> findAllByOrderByModifiedAtDesc(); // findAll : 전부 다 찾고 , ModifiedAt: 생성시간을 토대로 내림차순 해줘! (JPA 공식홈페이지 참조) , JPA의 규칙을 생성하는 것
}

 

- Memo Service 생성

service와 controller는 각자 패키지를 만들어 생성

 

MemoService.java

 

update 단계 : 필요 정보를 찾고 / 찾은 정보의 데이터를 업데이트

@RequiredArgsConstructor // 생성자 자동 생성하는 어노테이션
@Service
public class MemoService {

private final MemoRepository memoRepository; (find를 찾기 위한 repository)

@Transactional
public Long update(Long id, MemoRequestDto requestDto) {
Memo memo = memoRepository.findById(id).orElseThrow( // 필요 정보를 찾고
() -> new IllegalArgumentException("아이디가 존재하지 않습니다.")
);
memo.update(requestDto); // 찾은 정보의 데이터를 업데이트, 빨간줄을 해결하기 위해 Memo.java에 업데이트 메소드 추가
return memo.getId()
}
}

 

Memo.java

public void update(MemoRequestDto requestDto) { // MemoService.java 에서 전달받기로 한 것이 MemoRequestDto 이기에 requestDto로 받기
this.username = requestDto.getUsername(); // 빵틀에서 나온 실제 빵을 바꿔주는 과정
this.contents = requestDto.getContents();
}

 

- Controller(자동응답기) 생성

 

MemoController.java

@RequiredArgsConstructor
@RestController
public class MemoController {

private final MemoRepository memoRepository;
private final MemoService memoService;

@PostMapping("/api/memos") // create
public Memo createMemo(@RequestBody MemoRequestDto requestDto) { // 생성할 메모의 데이터를 받아야하고 데이터를 물고다니는 것이 dto , @RequestBody는 Post에서 꼭 넣어줘야함!


Memo memo = new Memo(requestDto); // 메모를 저장하기 위한 클래스 생성
return memoRepository.save(memo); // 데이터를 저장
}

@GetMapping("/api/memos") // read
public List<Memo> getMemos() { // 전체를 가져오기에 List
return memoRepository.findAllByOrderByModifiedAtDesc(); // MemoRepository.java 에서 만든 명령어 사용
}

@PutMapping("/api/memos/{id}")
public Long updateMemo(@PathVariable Long id, @RequestBody MemoRequestDto requestDto) //

변경해야 하는 requestDto를 받아오기 위해 MemoRequestDto 사용

{memoService.update(id, requestDto);
return id;
}

@DeleteMapping("/api/memos/{id}")
public Long deleteMemo(@PathVariable Long id) { // 주소에 있는 아이디를 변수로 받기 위해 Path와 id 사용
memoRepository.deleteById(id);
return id;
}
}