스프링

스프링과 JPA를 이용한 웹개발_JPA 기초지식

JANNNNNN 2024. 3. 17. 18:28

persistence.xml

<persistence-unit name="playground" transaction-type="RESOURCE_LOCAL">
  • JPA 설정을 구별하는 식별자 역할
  • 일반적으로 연결할 데이터베이스당 하나의 영속성 유닛을 등록한다.
  • 실제 개발에서는 여러 개의 DB를 사용할 수 있다. ex) 테스트 DB와 운영 DB
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url"
value="jdbc:mysql://localhost:3306/jpa_playground?serverTimezone=UTC" />
<property name="javax.persistence.jdbc.user" value="kim" />
<property name="javax.persistence.jdbc.password" value="sungryulKim12" />
  • JPA표준 속성 : 데이터 베이스 연동 및 접속에 필요한 정보 입력
    • driver ➡️ JDBC 드라이버
    • url ➡️ 데이터베이스 접속 ID
    • user ➡️ 계정
    • password ➡️ 비밀번호 
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.use_sql_comments" value="true" />
  • Hibernate 전용 속성
    • dialect -> 사용할 방언
    • show_sql -> JPA가 실행하는 sql 보기
    • format_sql -> sql을 formatting하여 보기좋게 보기
    • use_sql_comments -> 실행되는 sql 설명 보기

방언

데이터베이스 벤더(vendor)별로 SQL 쿼리 및 데이터베이스 스키마 생성을 제어하기 위해 사용되는 설정

각 데이터베이스 벤더는 고유한 SQL 문법과 데이터베이스 특성을 가지고 있기 때문에, JPA 구현체는 이러한 차이를 관리하기 위해 방언 설정을 제공한다.

ex)밥 묵었나와 밥 먹었니?는 같은 뜻이지만 다른 문법을 사용한 것처럼, ANSI SQL을 사용하면 통일된 SQL을 입력받을 수 있다.

즉, JPA에서 제공해주는 Dialect을 사용하면 서로 다른 문법에서 나오는 차이점을 해결해줄 수 있다!

 

어노테이션

  • Hibernate JPA Annotations

어노테이션은 "나 ~~하는 역할이야!"처럼 알려주는 이름표같은 존재

  • @Entity
    • 정의한 클래스가 영속성 컨텍스트에서 관리될 엔티티임을 나타냄.
  • @Table
    • 엔티티와 매핑되는 테이블을 지정
    • 특히, 엔티티 명과 테이블명이 다를 경우 이름을 지정
  • @OrderBy
    • 오름차순, 내림차순 정렬 수행
  • @Column
    • 컬럼의 세부 속성을 정의
    • name : 컬럼명
    • length : 문자열에 대하여 길이 지정
    • nullable : null 허용 여부
    • unique : 유일성
  • @Id
     
    • 해당 필드를 식별자(PK)컬럼에 매핑
      • 직접할당 : set으로 직접 PK를 할당해주는 것
      • 자동생성 : JPA에서 자동으로 PK를 지정해주는 것
    • @GeneratedValue
      • 식별자를 직접 할당하지 않고 자동으로 생성
      • 값을 지정하는 방식
        • Identity
        • Sequence
        • Table
        • Custom
        • Auto : 방언에 따라

Identity 사용법

위와 같이 @Id에 Identity를 사용하면 자동으로 Id값을 할당해준다.

즉 사진에서 직접할당하는 Id 부분을 삭제해줘도 DB에 자동으로 Id가 할당된다.

  • Auto-DDL
    • none: No change to the database structure
    • update: Hibernate changes the database according to the given Entity structures
    • validate: If schema is changed, terminating application
    • create: Creates the database every time, but don’t drop it when close
    • create-drop: Creates the database then drops it when the SessionFactory closes

이 부분을 활성화하면 프로그램을 재생할 때마다 기존의 DB는 삭제되고 새로 create 된다.