[Spring Boot] JPA 연결하기

hyun-jin·2022년 11월 30일
0

SpringBoot

목록 보기
4/6
post-thumbnail

JPA

  • JPA(Java Persistence API)
  • JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다.
  • JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환할 수 있다.
  • JPA를 사용하면 개발 생산성을 크게 높일 수 있다.
  • JPA는 자바 영역에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다.
  • 즉, 실제적으로 구현된것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다.


📌 1. JSP -> gradle에 추가하기

1-1. 프로젝트에 build.gradle 열기

1-2. dependencies에 JPA 코드 추가

✔ JPA 라이브러리에는 JDBC 라이브러리를 포함하고 있어 주석처리

  • 추가해줘야 할 코드
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

1-3. Gradle Refresh 하기

  • build.gradle 우클릭 > Gradle > Refresh Gradle Project



📌 2. JPA 설정하기

2-1. 프로젝트에 application.properties 열기

2-2. JPA 설정

#jpa

  • spring.jpa.show-sql=true
  • spring.jpa.hibernate.ddl-auto=none

2-3. 리포지터리(@Repository) & 트랜잭셔널 (@Transactional)

  • Repository 클래스 생성 후 @Repository 어노테이션 추가하기
  • 만들어 둔 Service 클래스에 @Transactional 어노테이션 추가하기

2-4. 엔티티(@Entity)

  • DB와 1:1 대응하는 DTO 클래스에 JPA가 관리한다는 의미로 @Entity 어노테이션을 추가해 준다.

2-5. @Id & 시퀀스(Sequence)

  • PK값인 변수에 @Id 어노테이션을 추가해 JPA에 알려주는 것
  • PK값에 시퀀스 사용을 위해 @GeneratedValue 어노테이션 추가
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "mySequence")
@SequenceGenerator(name = "mySequence", sequenceName = "member_seq", allocationSize = 1)	

✔ @Id - 내가 직접 셋팅해주는 직접 할당

✔ @GeneratedValue

  • SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용, ORACLE / @SequenceGenerator 필요

✔ @SequenceGenerator 속성

  • name : 식별자 생성기 이름 / 필수

  • sequenceName : DB에 등록되어있는 시퀀스 이름

  • initialValue : DDL 생성 시에만 사용됨, 시퀀스 DDL을 생성할 때 처음 시작하는 수를 지정한다. / 기본값 : 1

  • allocationSize : 시퀀스 한 번 호출에 증가하는 수 (성능 최적화에 사용) 데이터베이스 시퀀스 값이 하나씩 증가하도록 설정되어 있으면 이 값을 반드시 1로 설정해야한다. / 기본값 : 50

📌 3. JPA Repository에 EntityManager 주입하기

✔ JPA는 EntityManager로 뭐든지 동작 한다.

📌 4. JPQL(Java Persistence Query Language)

  • 테이블이 아닌 엔티티 객체를 대상으로 검색하는 객체지향 쿼리
  • SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않음
  • JPA는 JPQL을 분석 후 적절한 SQl을 만들어 데이터베이스를 조회

0개의 댓글