- Lombok
Getter, Setter 등 필수적으로 필요한 메소드들을 어노테이션으로 자동 생성해줘서
코드의 길이를 줄일 수 있도록 도와주는 라이브러리
- @Getter, @NoArgsConstrucctor 적용
@Getter :
Getter 함수를 대신함
public void getTutor() {
return this.tutor;
}
등 Getter함수들을 적을 필요 없음
@NoArgsConstructor :
기본생성자를 대신 생성
public Course() {
}
를 기재 안 해도 됨
/*Course.java*/
@Getter //getter함수를 대신함(lombok)
@NoArgsConstructor // 기본생성자를 대신 생성해줍니다.(lombok)
@Entity
public class Course extends Timestamped {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String tutor;
public Course(String title, String tutor) {
this.title = title;
this.tutor = tutor;
}
public void update(Course course) {
this.title = course.title;
this.tutor = course.tutor;
}
}
- @RequiredArgsConstructor 적용
@RequiredArgsConstructor :
생성자를 대신해서 Repository를 대신 넣어줌
public CourseService(CourseRepository courseRepository) {
this.courseRepository = courseRepository;
}
위의 기능을 어노테이션이 대신 함
/*CourseService.java*/
@Service
@RequiredArgsConstructor //생성자를 대신해서 Repository를 대신 넣어줌
public class CourseService {
private final CourseRepository courseRepository;
@Transactional
public Long update(Long id, Course course) {
Course course1 = courseRepository.findById(id).orElseThrow(
() -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
);
course1.update(course);
return course1.getId();
}
}
- DTO(Data Transfer Object)
update나 delete 시 데이터를 옮겨다니는데 도중 데이터가 바뀌면 큰 일 나기 때문에
완충재 역할을 하는 것
DTO의 멤버변수에 final로 선언해서 데이터를 못 바꾸게 방지함
/*CourseRequestDto.java*/
package com.sparta.week02.domain;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
@Setter
@Getter
@RequiredArgsConstructor
public class CourseRequestDto {
private final String title;
private final String tutor;
}
- update 메소드에서 쓰였던 Course 클래스를 CourseRequestDto 클래스로 변경
/*CourseService.java*/
@Service
@RequiredArgsConstructor //생성자를 대신해서 Repository를 대신 넣어줌
public class CourseService {
private final CourseRepository courseRepository;
@Transactional
public Long update(Long id, CourseRequestDto requestDto) {
Course course1 = courseRepository.findById(id).orElseThrow(
() -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")
);
course1.update(requestDto);
return course1.getId();
}
}
- Course 클래스의 update 메소드의 매개변수를 CourseRequestDto로 변경
/*Course.java*/
@Getter //getter함수를 대신함(lombok)
@NoArgsConstructor // 기본생성자를 대신 생성해줍니다.(lombok)
@Entity
public class Course extends Timestamped {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String tutor;
public Course(String title, String tutor) {
this.title = title;
this.tutor = tutor;
}
public void update(CourseRequestDto requestDto) {
this.title = requestDto.getTitle();
this.tutor = requestDto.getTutor();
}
}
- Course 생성자를 CourseRequestDto로 바꾸고 main함수에 있는 update 함수의 매개변수 변경
/*Week02Application.java*/
@EnableJpaAuditing
@SpringBootApplication
public class Week02Application {
public static void main(String[] args) {
SpringApplication.run(Week02Application.class, args);
}
@Bean
public CommandLineRunner demo(CourseRepository courseRepository, CourseService courseService) {
return (args) -> {
courseRepository.save(new Course("프론트엔드의 꽃, 리액트", "임민영"));
System.out.println("데이터 인쇄");
List<Course> courseList = courseRepository.findAll();
for (int i=0; i<courseList.size(); i++) {
Course course = courseList.get(i);
System.out.println(course.getId());
System.out.println(course.getTitle());
System.out.println(course.getTutor());
}
CourseRequestDto requestDto = new CourseRequestDto("웹개발의 봄, Spring", "임민영");
courseService.update(1L, requestDto);
courseList = courseRepository.findAll();
for (int i=0; i<courseList.size(); i++) {
Course course = courseList.get(i);
System.out.println("id: " + course.getId() +
"/ title: " + course.getTitle() +
"/ tutor: " + course.getTutor());
}
courseRepository.deleteAll();
};
}
}
'Spring Framework' 카테고리의 다른 글
API - POST, PUT, DELETE (0) | 2021.07.21 |
---|---|
API-GET (0) | 2021.07.18 |
JPA) JPA 심화 (0) | 2021.07.14 |
JPA) 생성일자, 수정일자 (0) | 2021.07.11 |
JPA) JPA 사용해보기 (0) | 2021.07.11 |