Spring Framework

JPA) 생성일자, 수정일자

na_o 2021. 7. 11. 01:06
728x90

- extends

클래스의 상속

이미 만들어둔 것을 가져다가 쓰는 것

 

- 상속 연습-Timestamped

DB의 기본 중 기본은 데이터의 생성일자와 수정일자를 파악하는 것임

생성일자와 수정일자를 필드로 가지면 파악할 수 있음

Timestamped 클래스를 미리 만들어두면 다른 클래스를 만들 때 상속해서 사용하면

굳이 일일이 매번 클래스 멤버변수에 생성일자, 수정일자를 쓸 필요가 없음 : 번거로움이 줄음

 

/*Timestamped.java*/

@MappedSuperclass // 상속했을 때, 멤버변수를 컬럼으로 인식하게 합니다.
//@EntityListeners: 테이블 같은걸 주시하는것
@EntityListeners(AuditingEntityListener.class) //AuditingEntityListener: 생성/수정 시간을 자동으로 반영하도록 설정
//abstract: 추상. 직접 구현할 수 없다. 상속으로만 쓸 수 있다
public abstract class Timestamped {

    @CreatedDate // 생성일자임을 나타냅니다.
    private LocalDateTime createdAt;

    @LastModifiedDate // 마지막 수정일자임을 나타냅니다.
    private LocalDateTime modifiedAt;
}

 

public class Course extends Timestamped{ /*기존 코드에 'extends Timestamped'를 추가만 함*/

/*Course.java*/
@NoArgsConstructor // 기본생성자를 대신 생성해줍니다.
@Entity // 테이블임을 나타냅니다.
public class Course extends Timestamped{ /*기존 코드에 'extends Timestamped'를 추가*/

    @Id // ID 값, Primary Key로 사용하겠다는 뜻입니다.
    @GeneratedValue(strategy = GenerationType.AUTO) // 자동 증가 명령입니다.
    private Long id;

    @Column(nullable = false) // 컬럼 값이고 반드시 값이 존재해야 함을 나타냅니다.
    private String title;

    @Column(nullable = false)
    private String tutor;

    public String getTitle() {
        return this.title;
    }

    public String getTutor() {
        return this.tutor;
    }

    public Course(String title, String tutor) {
        this.title = title;
        this.tutor = tutor;
    }
}

 

기존 코드에 '@EnableJpaAuditing' 이걸 추가해야 생성일/수정일 날짜가 자동 업데이트됨

/*Week02Application.java*/
package com.sparta.week02;
//이걸 추가해야 생성일/수정일 날짜가 자동 업데이트됨
@EnableJpaAuditing /*기존 코드에 이거만 추가*/
@SpringBootApplication
public class Week02Application {

    public static void main(String[] args) {
        SpringApplication.run(Week02Application.class, args);
    }

    //프로젝트에서 실제로 쓰이진 않음. 단지 JPA 사용을 보여주기 위해 튜터가 만들어본 코드임
    @Bean
    //repository: 쿼리를 날리는 녀석
    public CommandLineRunner demo(CourseRepository repository) {
        return (args) -> {
            Course course1 = new Course("웹개발의봄, Spring", "남병관");
            //save(): 테이블 만들고 저장하는 함수
            repository.save(course1);

            List<Course> courseList = repository.findAll();
            for(int i=0; i<courseList.size(); i++) {
                Course c = courseList.get(i);
                System.out.println(c.getTutor());
            }
        };
    }
}

 

http://localhost:8080/h2-console 들어가서 course 테이블 확인

created_at 컬럼과 modified_at 컬럼이 추가되었음

'Spring Framework' 카테고리의 다른 글

Lombok, DTO  (0) 2021.07.18
JPA) JPA 심화  (0) 2021.07.14
JPA) JPA 사용해보기  (0) 2021.07.11
JPA) JPA 시작하기  (0) 2021.07.09
MYSQL) 테이블 생성, 삽입, 조회  (0) 2021.07.09