<복습>
1. 인텔리제이 > New Project
- Group: com.sparta
- Artifact: week00
- Type: Gradle
- Language: Java
- Java Version: 11
- Lombok
- Spring Web
- Spring Data JPA
- H2 Database
- MySQL Driver
2. main > java > com.sparta.week00 > Week00Application.java를 Run하고 크롬에서 http://localhost8080 접속하여 연결 확인
3. Repository 만들기
src > main > java > com.sparta.week00 > domain 패키지 생성
> Memo.java, Timestamped.java, MemoRepository(인터페이스), MemoRequestDto.java 순으로 생성
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();
}
}
Timestamped.java
@MappedSuperclass // Entity가 자동으로 컬럼으로 인식합니다.
@EntityListeners(AuditingEntityListener.class) // 생성/변경 시간을 자동으로 업데이트합니다.
public class Timestamped {
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime modifiedAt;
}
MemoRepository.java 인터페이스
public interface MemoRepository extends JpaRepository<Memo, Long> {
List<Memo> findAllByOrderByModifiedAtDesc();
}
MemoRequestDto.java
@Getter
public class MemoRequestDto {
private String username;
private String contents;
}
4. Service 만들기
src > main > java > com.sparta.week00 > service 패키지 생성 > MemoService.java 생성
MemoService.java
@RequiredArgsConstructor // final로 생성된 것을 필수로 꼭 넣어주도록 도와줌
@Service //Service라는것을 스프링에게 알림
public class MemoService {
private final MemoRepository memoRepository;
// final MemoRepository를 필수로 사용해야한다고 알리는 것
// find를 하기 위해서는 Repository필요하기 때문에 생성
@Transactional // DB반영 하라는 어노테이션
public Long update(Long id, MemoRequestDto requestDto) {
// 반환타입: Long, 메소드명: update, 재료:(기본키)id와 변경시킬 내용에 대한 정보 MemoRequestDto형 변수명 requestDto
Memo memo = memoRepository.findById(id).orElseThrow(
// find를 하기 위해서는 Repository 필요
() -> new IllegalArgumentException("아이디가 존재하지 않습니다.")
// NullpointerException: 포인터가 가르키는것이 없다
// IllegalArgumentException : Argument=파라미터(전달받는 값)잘못 됨
);
memo.update(requestDto);
return memo.getId();
}
}
Memo.java에 update 메소드 추가
public void update(MemoRequestDto requestDto) {
// 반환값 없어도 되서 void 사용, Service에서 전달 받기로 한 값 MemoRequestDto
this.username = requestDto.getUsername(); // 전달 받은 Dto의 값을 findbyId로 찾은 Memo안에 넣음
this.contents = requestDto.getContents();
}
5. Controller 만들기
src > main > java > com.sparta.week00 에 controller 패키지 생성 > MemoController.java 생성 >
Create/Read/Delete 코드 추가
@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();
}
@DeleteMapping("/api/memos/{id}")
public Long deleteMemo(@PathVariable Long id) {
memoRepository.deleteById(id);
return id;
}
@PutMapping("/api/memos/{id}")
public Long updateMemo(@PathVariable Long id, @RequestBody MemoRequestDto requestDto) {
memoService.update(id, requestDto);
return id;
}
}
6. ARC로 기능 확인
기능 | Method | URL | |
(조회) 빈 목록 반환 | GET | http://localhost:8080/api/memos | |
(생성) 신규 메모 생성 | POST | http://localhost:8080/api/memos | Headers: Content-Type - application/json |
(조회) 신규 메모 조회 | GET | http://localhost:8080/api/memos | |
(삭제) 신규 메모 삭제 | DELETE | http://localhost:8080/api/memos | |
(조회) 빈 목록 반환 | GET | http://localhost:8080/api/memos/1 |
신규 메모 생성 Body
{
"username": "avfnek2",
"contents": "첫 번째 메모"
}
<2주차 키워드>
- 객체지향 프로그래밍(Object-Oriented Programming, OOP): 속성과 기능(동작)을 가진 현실 세계의 객체를 기본 단위로하여 이들의 상호작용으로 서술하는 방식
- JVM(Java Virtural Machine): 자바 가상 머신, java는 특정 OS에 종속적이지 않음. 그 이유는 OS위에 JVM에서 java를 인식하고 실행하기 때문임
참고 레퍼런스
https://lxxyeon.tistory.com/86
- 2주차 회고
1주차 보다는 난이도가 낮음
-> but.....조금 더 수월한건 맞지만 알고리즘과 자바 둘 다 따라가기 약간 벅찼다..
코딩 테스트 제출 미완료
-> 개별 과제에 집중하느냐 알고리즘 공부를 놓치고 있기도했고... 어쨋든 java를 그냥 내가 못한다.. 다음주에는 java에 시간 더 써야지...
'개발 일지' 카테고리의 다른 글
[TIL]이노베이션 캠프 16일차 (0) | 2022.08.16 |
---|---|
[TIL]이노베이션 캠프 15일차 (0) | 2022.08.15 |
[TIL]이노베이션 캠프 14일차 (0) | 2022.08.14 |
[TIL]이노베이션 캠프 13일차 (0) | 2022.08.13 |
[TIL]이노베이션 캠프 12일차 (0) | 2022.08.12 |