728x90
🔻🔻🔻 환경설정: https://bkyungkeem.tistory.com/16
🔨 기본적인 클래스 만들기
- 경로 = 패키지
- 클래스 = 클래스파일
경로: 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으로 확인하기
- 조회(GET) - URL: http://localhost:8080/api/memos
- 생성(POST) - URL: http://localhost:8080/api/memos / Headers: Content-Type-application/jason
- {
"username ": "홍길동",
"contents ": "JPA 기본 연습하기",
} - 수정(PUT) - URL: http://localhost:8080/api/memos/id번호
- 삭제(POST) - URL: http://localhost:8080/api/memos/id번호
728x90
'🌐 Language > java' 카테고리의 다른 글
[ Java ] Bufferedreader VS Scanner (0) | 2023.01.10 |
---|---|
[ Java ] 오버로딩(Overloading) & 오버라이딩(Overriding) (0) | 2023.01.03 |
[JPA] 연관관계 매핑 @OneToMany @ManyToOne @OneToOne @ManyToOne (0) | 2022.10.10 |
[JPA] JPA(Java Persistence API) (0) | 2022.10.07 |
[ Java ] - JAP 환경 설정 / DB-H2 (1) (0) | 2022.10.04 |
댓글