2주차 내용-2
상속의 개념
Extends : 클래스의 상속
class Person {
private String name;
private String getName() {
return this.name;
}
}
class Tutor extends Person {
private String address;
// Person 클래스를 상속했기 때문에,
// name 멤버변수와 getName() 메소드를 가지고 있습니다.
}
DB의 기본은 생성일자와 수정일자!
@MappedSuperclass // 상속했을 때, 컬럼으로 인식하게 합니다.
@EntityListeners(AuditingEntityListener.class)
// 생성/수정 시간을 자동으로 반영하도록 설정
public abstract class Timestamped {
@CreatedDate // 생성일자임을 나타냅니다.
private LocalDateTime createdAt;
@LastModifiedDate // 마지막 수정일자임을 나타냅니다.
private LocalDateTime modifiedAt;
Ø domain 패키지 내 Timestamped.java 클래스 생성
LocalDateTime : 자료형, 시간을 나타내는 자바 자료형
Abstract : 추상클래스, 직접구현x 상속으로만 구현 가능하다.
@EnableJpaAuditing
Ø Week02Application 에 추가 : 생성일자 수정일자에 따라 자동업데이트됨
CRUD : Create Read Update Delete
Course course = repository.findById(1L).orElseThrow(
() -> new NullPointerException("해당 아이디 없습니다.")
^ Repository.findById 할 경우 존재하지 않을 경우의 예외 처리방법도 정해줘야 함
스프링의 구조
1. Controller : 가장 바깥 / 요청과 응답 처리
2. Service : 중간 / 실제 작동이 일어남 > Update 는 이부분에서 작성
3. Repository : 가장 안쪽, DB 와 맞닿아 있음
Ø Course 클래스에 update 메소드 추가
public void update(Course course) {
this.title = course.title;
this.tutor = course.tutor;
Ø Sevice 패키지 생성 후 CourseService.java 생성
@Service // 스프링에게 이 클래스는 서비스임을 명시
public class CourseService {
// 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();
Ø 업데이트
@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());
}
Course new_course = new Course("웹개발의 봄, Spring", "임민영");
courseService.update(1L, new_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());
}
};
}
courseRepository.deleteAll();
Ø 삭제
Lombok :
롬복은 자바 프로젝트에서 필수적으로 필요한 메소드/생성자들을 자동생성해줌으로써 코드를 절약할 수 있게 도와주는 라이브러리
Ø Settting > Annotation Precessors > Enable 체크 > plugins > Lombok 설치
Ø @Getter 입력으로 get 메소드 자동생성
Ø @NoArgsConstructor : 기본 생성자 생성
Ø @RequiredArgsConstructor : 필수 인자를 가진 생성자를 자동 생성해주는 어노테이션입니다. 즉 final 이나 @NonNull 어노테이션이 붙은 맴버변수 필드만 파라미터로 받는 생성자를 만들어 줍니다.
DTO : Data Transfer Object : 데이터를 주고받을 때는 새로운 클래스를 만들자?
package com.sparta.week02.domain;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@RequiredArgsConstructor
public class CourseRequestDto {
private final String title;
private final String tutor;
}
^CorseRequestDto.java 만들기 생성
생성 후 아래와 같이 update 에서 Course를 CourseRequestDto 로
course 를 requestDto 로 course.title 을 requestDto.getTitle() 로 변경해준다.
'강의정리들 > [2021] Spring Boot' 카테고리의 다른 글
[코스파] 스프링 기초 4주차-2 (0) | 2022.01.02 |
---|---|
[코스파] 스프링 기초 4주차-1 (0) | 2022.01.02 |
[코스파] 스프링 기초 3주차 (0) | 2022.01.01 |
[코스파] 스프링 기초 2주차-3 (0) | 2021.12.05 |
[코스파] 스프링 기초 2주차-1 (0) | 2021.12.03 |