spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
// save a few customers
repository.save(new Customers("Jack", "Bauer"));
repository.save(new Customers("Chloe", "O'Brain"));
(값 업데이트 하기)
// final: 서비스에게 꼭 필요한 녀석임을 명시
private final CourseRepository courseRepository;
// 생성자를 통해, Service 클래스를 만들 때
// 꼭 Repository를 넣어주도록
// 스프링에게 알려줌
public CourseService(CourseRepository courseRepository) {
this.courseRepository = courseRepository;
}
@Transactional // SQL 쿼리가 일어나야 함을 스프링에게 알려줌
public Long update(Long id, Course course) {
Course course1 = courseRepository.findById(id).orElseThrow(
() -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
);
course1.update(course);
return course1.getId();
}
(Delete 해보기)
courseRepository.deleteAll();
Lombok : 코드를 절약하기 위한 라이브러리로, 자바 프로젝트 진행시, 필수적으로 필요한 메소드를 자동생성!
단축키
- ctrl + alt + s : 환경설정
Annotation 목록
@Getter
@NoArgsConstructor
@RequiredArgsConstructor (service.java에서 ~Repository 전달받아야 할 때)
// 생성자를 통해, Service 클래스를 만들 때
// 꼭 Repository를 넣어주도록
// 스프링에게 알려줌
public CourseService(CourseRepository courseRepository) {
this.courseRepository = courseRepository;
}
=
@RequiredArgsConstructor
데이터값을 변경할 때 이에 대한 매개체로 Course 클래스를 직접 사용하면 안됨!
내가 아닌 다른 사람이 마음대로 변경하게 되면 시스템에 오류 날 가능성이 커짐
이에 DB에 연결된 클래스는 그대로 두고 이에 대한 완충재로 활용하는 것이 DTO!
DTO : 해당 클래스에 대한 데이터를 그대로 물고 다니는 녀석!
package com.example.week01_hw.domain;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@RequiredArgsConstructor
public class CourseRequestDto {
private final String title;
private final String tutor;
}
= 꼭 필요한 녀석은 final로 선언이 되어야 함
API
- 클라이언트 - 서버 간의 약속
REST 규칙
- 주소에 명사, 요청 방식에 동사를 사용함으로써 의도를 명확히 드러냄
/courses
/accounts/edit
(edit => put 방식 대체)데이터 요청방식
데이터 조회 API
@RequiredArgsConstructor
@RestController
public class CourseController {
private final CourseRepository courseRepository;
@GetMapping("/api/courses")
public List<Course> getCourses() {
return courseRepository.findAll();
}
}
POST
@PostMapping("/api/courses")
public Course createCourse(@RequestBody CourseRequestDto requestDto) {
Course course = new Course(requestDto);
return courseRepository.save(course);
}
PUT
@RequiredArgsConstructor
@Service
public class MemoService {
private final MemoRepository memoRepository;
@Transactional
public Long update(Long id, MemoRequestDto requestDto) {
Memo memo = memoRepository.findById(id).orElseThrow(
() -> new NullPointerException("id값 없는데용?")
);
memo.update(requestDto);
return id;
}
}
@PostMapping("/api/memos")
public Memo createMemos(@RequestBody MemoRequestDto requestDto) {
Memo memo = new Memo(requestDto);
return memoRepository.save(memo);
}
- 날아오는 녀석을 정확이 requestDTO에 넣기 위해서는 requestBody 어노테이션이 꼭 필요!
- requestBody로 말아 넣어줘야 해!!!