Cute Running Puppy
본문 바로가기
개발일기/Java

JPA 기초 예제

by 징구짱 2023. 2. 26.
728x90
  • IntelliJ 프로젝트 생성하기

File > New > Project...

Java / Gradle / JDK : 17 선택 후 Next

  • Spring Web
  • Spring Data JPA
  • H2 Database
  • Lombok

추가 후 Create

 

프로젝트가 생성되면 springframework 버전을 2.7.5로 바꿈

꼭 생성하자마자 바꾸자.... 나중에 바꾸려면 힘들다... 알고싶지 않았다....

더보기

버전을 바꾸지 않으면 아무리 실행해도 테이블 생성이 안된다~~!!
버전을 나중에 바꾸려고 하면 빨간 지렁이들이 춤을 춘다.... 다시 import해줘야한다 흑흑

 

 

  • db 연결

src > main > resorces > application.properties

 

 

  • JPA 샘플
Test (Class)

 

@Entity
public class Test {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true)
    private String username;


    @Column(nullable = false)
    @Enumerated(value = EnumType.STRING)
    private Gender gender;

 

    @OneToMany(mappedBy = "test", fetch = FetchType.EAGER)

    private List<Orders> orders = new ArrayList<>();

 

    public Test(String username, Gender gender) {
        this.username = username;
        this.gender = gender;
    }

}

 

  • @Entity : DB 테이블 역할
  • @Id : PK   
  • @GeneratedValue(strategy = GenerationType.IDENTITY) : ID가 자동으로 증가하여 생성
  • @Column(nullable = false, unique = true) : 컬럼
    nullable: null 허용 여부
    unique: 중복 허용 여부 (false 일때 중복 허용)
  • @Enumerated(value = EnumType.STRING) : Enum 사용 (사용자가 타입을 정의할 수 있음)
  • @OneToMany : 연관관계 표현 (FK)
  • public Test(String username, Gender gender) : 생성자 객체 생성할 때 사용

 

Gender (Enum)

Enum으로 값을 입력받을 때 해당 Type으로 받을 수 있음    ex) Gender.FEMALE

public enum Gender {
    MALE, 
    FEMALE 
}

 

TestRepository (interface)
public interface TestRepository extends JpaRepository<Test, Long> {
    Optional<Test> findByUsername(String userName);
}

 

  • JpaRepository<Test, Long> : @Entity로 생성한 테이블에 접속하기 위한 인터페이스
    Test : 생성한 DB 테이블
    Long : @Id의 타입
  • Optional<Test> findByUsername(String userName) : username으로 조회하기
    JpaRepository에서 전체 조회 기능을 제공하지만 조건을 걸고 싶으면 메서드를 등록해줘야함 
 
TestRun (실행할 class)

@Component
@RequiredArgsConstructor
public class TestRun implements ApplicationRunner {
    private final TestRepository testRepository;
    @Override
    public void run(ApplicationArguments args) throws Exception {
        List<Test> test = new ArrayList<>();
        Test test1 = new Test("이진", Gender.FEMALE);
        test.add(test1);
        testRepository.saveAll(test);

        System.out.println("test 데이터");
        List<Test> findTests = testRepository.findAll();

        for (Test findTest : findTests) {
            System.out.println(findTest.getUsername());
            System.out.println(findTest.getGender());
        }

        Test tester = testRepository.findByUsername("이진").orElseThrow(
                () -> new RuntimeException("이진 없음")
        );

        System.out.println("이름 = " + tester.getUsername());
        System.out.println("성 = " + tester.getGender());
    }
}

 

@Component : Bean을 자동으로 등록

@RequiredArgsConstructor : 초기화 되지않은 final 필드나, @NonNull 이 붙은 필드에 대해 생성자를 생성

private final TestRepository testRepository : repository 객체 생성

testRepository.saveAll(test) : List에 정보를 담아 저장

testRepository.findAll() : 해당 테이블을 모두 찾아 List에 담음

.getUsername() : 컬럼을 가져옴 (TestRepository 에서 extends한 JpaRepository의 기본 메서드)

.findByUsername : 해당 컬럼으로 조회 (TestRepository에서 직접 등록한 메서드)

 

 

  • 실행하기

실행시 테이블은 자동으로 만들어짐

 

 

 

  • DB 확인하기

localhost:8080/h2-console

접속 후 application.properties에 작성한 datasource.url, User Name, Password 설정 후 Connect

생성된 테이블은 왼쪽에서 확인 가능하고 오른쪽에서 직접 Select해볼 수 있음

728x90

'개발일기 > Java' 카테고리의 다른 글

IntelliJ 프로젝트 자동 실행  (1) 2023.02.28
Postman 사용  (0) 2023.02.27
InteliJ 자동 import방법  (0) 2023.02.24
[Java] 배열  (0) 2023.02.16
[Java] 연산자  (0) 2023.02.16