스프링
스프링과 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 : 방언에 따라
- 해당 필드를 식별자(PK)컬럼에 매핑
위와 같이 @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 된다.