Java/Java JPA

Java Jpa에서 data.sql을 이용하여 데이터를 주입시키는 방법(H2)(코드와 연동)

너어디사니 2023. 7. 29. 04:07

*기본 설정 관련은 https://whererufromdevelop.tistory.com/3 <<- 해당 내용 봐주시면 감사하겠습니다

 

*JAVA 20 기준입니다 

 

3. 테이블과 컬럼값을 지정해주는 클래스를 생성

테이블과 컬럼값을 지정해주는 클래스를 생성해줍니다 예시로 사용자에 대한 정보를 얻고 싶으면 사용자의 나이나 이름 등등이 있겠죠?? 그런 것들을 모아서 변수로 지정해주면 됩니다 저 같은 경우에는 이름, 이메일, 만든 날짜, 업데이트 된 날짜 이렇게 4개의 컬럼으로 준비했습니다

package com.example.myjpa.domain;

import jakarta.persistence.*;
import lombok.*;

import java.time.LocalDateTime;

@Data //lombok 라이브러리에서 사용하는 Annotation 으로 Getter, Setter와 여러가지 Object 메소드들을 제공한다
@Table(name = "users") //table의 이름을 지정해준다
@Entity	//해당 Annotation이 붙은 클래스는 JPA가 관리해주며 DB 테이블과 매핑을 해준다
@AllArgsConstructor //lombok 라이브러리에서 사용하는 Annotation 으로 전체 Constructor를 제공해준다
@NoArgsConstructor //lombok 라이브러리에서 사용하는 Annotation 으로 기본 Constructor를 제공해준다
@RequiredArgsConstructor 
//lombok 라이브러리에서 사용하는 Annotation 으로 필드에 Annotation 설정 값이 존재한다면 해당 매개변수를의 annotation 값을 지정하면서 Constructor를 제공해준다
public class Users {

    @Id // 기본 Primary Key로 지정해준다
    @GeneratedValue(strategy = GenerationType.AUTO) //기본 Key값에 대한 생성 전략을 제공한다
    private Long id;

    @Column //컬럼 이름을 지정해준다
    @NonNull //lombok 라이브러리에서 사용하는 Annotation 으로 해당 변수는 Null이 들어갈수 없게 해야 할 경우 사용한다
    private String name;

    @Column
    @NonNull
    private String email;

    @Column
    private LocalDateTime createAt;

    @Column
    private LocalDateTime updateAt;


}

4. Jpa Repository Interface 주입

다음 Jpa Repository를 사용하기 위해서 하나의 Interface를 만들어서 Jpa를 사용 할 수 있게끔 만들어주었습니다

package com.example.myjpa.repository;

import com.example.myjpa.domain.Users;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;

import java.util.List;

public interface UsersRepository extends JpaRepository<Users, Long> {  
	//JpaRepository를 상속 받는다 <테이블을 지정해준 클래스, Primary Key의 Type>을 지정해준다
	
    List<Users> findByName(String name); //Main 클래스에서 이름으로 찾기 위해서 구현

    Users findById(long id); //Main 클래스에서 ID로 찾기 위해서 구현
}

기본 Interface로 만들고 JpaRepository를 상속 받는 것만으로도 구현이 가능하지만 저는 추가적으로 Main 클래스에서도 실험을 하기 위해서 아래 내용을 구현해줬습니다

 

5. schema.sql과 data.sql을 지정

schema.sql파일을 만들어서 DB안에 있는 테이블의 구조를 지정해주고 data.sql을 만들어서 컬럼 안에 넣을 데이터 값을 지정해줍니다

-- schema.sql

CREATE TABLE users (
                       id INT PRIMARY KEY,
                       name VARCHAR(255),
                       email VARCHAR(255),
                       create_at TIMESTAMP,
                       update_at TIMESTAMP
);

-- data.sql

insert into users (id,name, email, create_at, update_at) values (1,'kim','kim@gmail.com', now(), now());
insert into users (id,name, email, create_at, update_at) values (2,'lee','lee@gmail.com', now(), now());
insert into users (id,name, email, create_at, update_at) values (3,'park','park@gmail.com', now(), now());
insert into users (id,name, email, create_at, update_at) values (4,'jung','jung@gmail.com', now(), now());
insert into users (id,name, email, create_at, update_at) values (5,'song','song@gmail.com', now(), now());
insert into users (id,name, email, create_at, update_at) values (6,'ahn','ahn@gmail.com', now(), now());

6. 이 후 테스트 코드나 메인 코드에서 해당 코드가 정상적으로 동작하는지 확인해보면 끝이 납니다

 

* 틀린 부분이나 오타 확인시 댓글로 지적 부탁드립니다

* 공부 하는 입장에서 올린거니 무분별한 악플은 자제 부탁드립니다