41일 TIL
JPA / DB
상속
클래스의 상속은 이미 만들어둔 코드를 갖다가 쓴다라고 선언하는 것
DB의 기본은 데이터가 언제 생성되었고 언제 변경됐는지를 아는 것.
그래서 생성일자와/수정일자가 필요하다
만들기
< @ (Annotation) 표시는 스프링에게 이런 역할이 있다고 말해주는 것>
<LocalDateTime: 시간을 나타내주는 자바의 자료형>
@MappedSuperclass // 상속했을 때, 컬럼으로 인식하게 합니다.
@EntityListeners(AuditingEntityListener.class) // 생성/수정 시간을 자동으로 반영하도록 설정
<abstract 무조건 상속으로만 사용가능 직접구현 x>
public abstract class Timestamped {
@CreatedDate // 생성일자임을 나타냅니다.
private LocalDateTime createdAt;
@LastModifiedDate // 마지막 수정일자임을 나타냅니다.
private LocalDateTime modifiedAt;
}
상속을해줌 (extends Timestamped)
반영시키기 ( @EnableJpaAuditing)
CRUD: 정보관리의 기본 기능
- 생성 (Create)
- 조회 (Read)
// 데이터 저장하기
repository.save(new Course("봄봄봄", "김성훈"));
// 데이터 전부 조회하기
List<Course> courseList = repository.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());
}
// 데이터 하나 조회하기
<ID를 찾는데 long으로 찾음 .orElseThrow() = 오류가 발생하면 ()를해라 >
Course course = repository.findById(1L).orElseThrow(
() -> new NullPointerException("해당 아이디가 존재하지 않습니다.")
);
- 변경 (Update)
스프링의 구조 3가지 영역중(Controller, Service, Repo) Service 부분에 해당
<들어오면 업데이트 해줘라>
public void update(Course course) {
this.title = course.title;
this.tutor = course.tutor;
}
/////
@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("가을가을가을", "김춘식");
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(); //삭제
};
}
<봄봄봄,김성훈이 들어갔다가 가을가을 김춘식으로 업데이트>
- 삭제 (Delete)
<맨 밑에 추가>
courseRepository.deleteAll(); 추가
Author And Source
이 문제에 관하여(41일 TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@shkim1199/35TIL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)