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(); 추가

좋은 웹페이지 즐겨찾기