[java, #6] JPA를 활용한 데이터 저장(save) 및 조회(get)

5205 단어 JPAextendsdomainJPA

0. 목적 및 예시

0.1 목적

JPA를 활용하여 RDBMS에 데이터 입력 및 조회하기

JPA는 java 코드를 이용해서 SQL을 실행시키는 방법이다. JPA는 두 언어를 배울 시간을 절약해줌으로서 효율적인 코딩 생성이 가능하도록 한다.

이제는 JPA가 무엇인지 알았으니, 실제로 어떻게 사용하는지 알아보자.

0.2 예제

RDBMS에 Aircraft 테이블을 생성한다.

이를 위한 과정은 크게 4단계로 구분된다.

① JPA 사용을 선언한다.
② table 생성 및 정의한다. 모델명과 제조사를 필드로 설정한다.
③ 상속을 수행한다. 데이터 생성 날짜 및 수정 날짜를 상속한다.
④ JPA를 실행한다. 데이터를 입력하고 조회한다.

JPA를 활용하여 RDBMS에 Aircraft table을 생성한다. 모델명, 제조사, 데이터 생성 날짜, 수정 날짜 필드를 제작할 것인데, 이 중 데이터 생성 날짜 및 수정 날짜는 상속한다. 테이블 선언이 완료되었다면, 데이터를 저장하고 조회해본다.

1. JPA 활용 선언

1.0 목적 및 결과

  • 목적: JPA를 사용한다는 것을 java가 인식하도록 한다.
  • 결과: JPA 활용이 가능해지고, 어떤 형식을 사용할지 설정한다.

JPA 활용 선언의 목적은 java의 JPA 인식이다. 이를 위해서는 다음과 같은 위치에 스크립트를 생성하고, 코드를 작성해야 한다.

1.1 JPA 시작 선언

1.1.1 스크립트 생성 및 위치

  • 목적: JPA 활용 선언(turn on)
  • 스크립트명: application.properties(기존에 있음)
  • 위치: main > java > resources > application.properties

가장 먼저 해야할 것은 JPA를 사용할 것이라고 알려주는 것이다. 다음과 같은 코드를 제작하면 된다.

1.1.2 코드

spring.h2.console.enable=true // 스프링에서 h2 콘솔(관리자모드)를 사용할 수 있도록 하자.
spring.datasource.url=jdbc:h2:mon:testdb // 데이터소스 주소는 jdbc:h2:mon:testdb 이다.

1.2 JPA 사용 방법 설정

1.2.1 스크립트 생성 및 위치

  • 목적: JPA 방법 설정
  • 스크립트명: AircaftRepository(새로 생성하기)
  • 생성 위치: main > java > com.sparta.week02 > domain > AircaftRepository

다음 해주어야 할 부분은 JPA를 어떻게 사용할지 설정을 해주는 것이다.

1.2.2 코드

// 목적: JPA 상속 방법 설정

public AircraftRepository<Aircraft, Long> {}

2. table 생성 및 불러오기

2.0 목적 및 결과

  • 목적: table을 생성하고, 변수를 활용하는 방법을 정의한다.
  • 결과: table 필드 정의 및 getter, 생성자 정의

2.1 스크립트 생성 및 위치

  • 목적: table 생성
  • 스크립트명: Aircraft
  • 위치: java > main > com.sparta.week02 > domain > Aircraft

두 번째로 해야 할 일은 table과 관련된 행위를 정의하는 것이다. table을 생성하고, table을 수정하는 행위를 정의하는 코드는 다음과 같다.

2.2 코드

// 목적: table 생성 및 데이터 생성 방법 설정

@NoArgConstructor // 기본생성자 자동 생성
@Entity //  table이라는 것은 인식하도록 함
public class Aircraft() {
  
  
  //1. 테이블 생성
  @Id
  @GenerateValue(Strategy=GenerateType.AUTO)
  private Long Id;
  
  @Column(nullable=false)
  private String model;
  
  @Column(nullable=false)
  private String manufacturer;


  //2. Getter: table에서 data 가져올 때 사용
  public String getModel() {
    return this.model;
  }
  
  public String getManufaturer() {
    return this.manufaturer;
  }
  
  
  //3. 생성자: table에서 데이터 생성 시 활용
  public Aircraft(String model, String manufaturer) {
    this.model = model;
    this.manufaturer = manufacturer;
  }
  
  
}

3. 상속하기

3.0 목적 및 결과

  • 목적: 데이터 생성 날짜 및 수정 날짜 설정 후 상속하기
  • 결과: 데이터 생성 날짜 및 수정 날짜가 table에 삽입됨

3.1 스크립트 생성 및 정의

  • 스크립트명: Timestamped(생성)
  • 생성 위치: main > java > com.sparta.week02 > domain > Timestamped

3.2 코드

// 목적: 상속하기

@MappedSuperClass // 상속 시, 컬럼으로 인식하도록 함
@EntityListeners(AuditingEntityListener.class) // 생성/수정을 자동으로 반영
public class Timestamped {
  
  @CreatedDate // java 인식: 데이터 최초 생성 날짜
  private LocalDateTime generatedAt;
  
  @LastMoifiedDate // java 인식: 데이터 마지막 수정 날짜
  private LocalDateTime modifiedAt;

}

4. 실행하기

4.0 목적 및 결과

  • 목적: JPA를 활용한 SQL 명령 수행
  • 결과: 데이터 저장, 조회 및 출력

4.1 스크립트 생성 및 정의

  • 목적: JPA 실제 작동시키기
  • 스크립트명: week02Application
  • 생성 위치: main > java > com.sparta.week02 > week02Application

4.2 코드

// 목적: JPA를 이용하여 SQL 작동시킴

@EnableJpaAuditing // 상속 행위 반영
@SpringBootApplication // 웹 어플리케이션이라는 것을 명시함
public class week02Application {
	 @Bean
    public CommandLineRunner demo(AircraftRepository repository) {
        return (args) -> {
        
        // 1. 데이터 생성
        Aircraft aircraft1 = new Aircraft("B737", "Boeing");
        
        // 2. DB에 데이터 저장
        repository.save(aircraft1);
        
        // 3. 데이터 조회하기
        // 3.1 리스트 가져오기
        List<Aircraft> aircraftList = repository.findAll();
        
        // 3.2 현시하기
        for (int i=0;i=aircraftList.size();i++){
          Aircraft a = aircraftList.get(i);
          system.out.println( a.getModel() );
          system.out.println( a.getManufacturer() );
        }

    };
}

}

좋은 웹페이지 즐겨찾기