JPA 구현체로 하이버네이트를 사용하기 위해 필요한 lib는 아래와 같다.
구분 | 내용 | gradle 참고용 |
hibernate-core | 하이버네이트 라이브러리 | * hibernate-entitymanager를 라이브러리로 지정하면 hibernate-core도 함께 내려 받는다. |
hibernate-entitymanager | 하이버네이트가 JPA 구현체로 동작하도록 JPA 표준을 구현한 라이브러리 | implementation group: 'org.hibernate', name: 'hibernate-entitymanager', version: '5.5.2.Final' |
hibernate-jpa-2.1-api | JPA 2.1 표준 API를 모아둔 라이브러리 | * hibernate-entitymanager를 라이브러리로 지정하면 hibernate-jpa-2.1-api도 함께 내려 받는다. |
(mysql 사용시) mysql-connector-java |
사용하는 데이터베이스에 따라 상이할 수 있다. | implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.25' |
JPA를 사용하기 위해서는 Table과 객체간의 맵핑작업이 필요하다.
아래는 Car 객체를 데이터베이스 Car Table에 맵핑한 정보이다.
@Entity
@Table(name = "Car")
public class Car {
@Id
@Column(name = "id")
private int apiKey;
@Column(name = "car_type")
private String carType;
@Column(name = "car_name")
private String carName;
private String carInfo;
}
Car 객체에 사용된 어노테이션에 대해 알아보자.
@Entity @Table @Column이 Car 클래스에 매핑 정보이다. JPA는 매핑 어노테이션을 분석해서 어떤 객체가 어떤 테이블과 관계가 있는지 알게 된다.
@Entity | 이 클래스를 테이블과 맵핑한다고 JPA에게 알려준다. @Entity 어노테이션이 사용된 클래스를 엔티티 클래스라고 한다. |
@Table | 엔티티 클래스에 매핑할 테이블 정보를 알려준다. name 속성을 이용하게 되면 name에 명시된 내용과 Table Name을 매핑하게 된다. 만약 name 속성을 이용하지 않으면 클래스 이름을 Table Name과 매핑하게 된다. |
@Id | 테이블의 Primary Key에 매핑한다. @Id 어노테이션을 사용한 필드를 식별자 필드라고 한다. |
@Column | 컬럼에 매핑한다. name 속성을 이용하면 Table의 컬럼에 Name과 매핑할 수 있다. |
매핑 정보가 없는 필드 | 매핑 어노테이션을 사용하지 않으면 필드명과 컬럼명을 매핑하여 사용한다. |
* JPA 어노테이션 패키지는 javax.persistence이다.
그럼 이제 persistence.xml에 대해 알아보자.
JPA는 persistence.xml를 이용하여 설정 정보를 관리한다. persistence.xml은 META-INF/persistence.xml에 위치하면 별도 설정 없이 JPA가 인식하게 된다.
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
version="2.1">
<persistence-unit name="car">
<properties>
<!-- 필수 -->
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url"
value="jdbc:mysql://{RDS 주소}"/>
<property name="javax.persistence.jdbc.user" value="{usr id}"/>
<property name="javax.persistence.jdbc.password" value="{password}!"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<!-- 옵션 -->
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
</properties>
</persistence-unit>
</persistence>
1) 설정 파일은 persistence로 시작한다. 여기서 xml 네임스페이스와 사용할 버전을 표기하면된다.
2) persistence-unit 설정 : 일반적으로 연결할 데이터베이스당 하나의 persistence-unit을 설정한다.
javax.persistence.jdbc.driver | JDBC 드라이버 |
javax.persistence.jdbc.user | 데이터베이스 접속 아이디 |
javax.persistence.jdbc.password | 데이터베이스 접속 비밀번호 |
javax.persistence.jdbc.url | 데이터베이스 접속 URL |
hibernate.dialect | 데이터 베이스 방언(Dialect) 설정 |
hibernate.show_sql | 하이버네이트가 실행한 SQL을 출력 |
hibernate.format_sql | 하이버네이트가 실행한 SQL을 출력할 때 보기 쉽게 정렬 |
hibernate.use_sql_comments | 쿼리를 출력할 때 주석도 함께 출력 |
* 데이터베이스 방언 : 데이터베이스마다 SQL 문법과 함수가 조금씩 차이가 나는게 있다. 이처럼 SQL 표준을 지키지 않거나 특정 데이터베이스만의 고유한 기능을 JPA에서는 방언(Dialect)이라 한다.
* JPA 구현체들은 보통 엔티티 클래스를 자동으로 인식하지만, 환경에 따라 인식하지 못할 때도 있다. 그때는 persistence.xml에 <class>를 사용하여 JPA에서 사용할 엔티티 클래스를 지정해야 한다.
<persistence-unit name="car">
<class>jpastudy.data.Car</class>
오늘은 여기까지 입니다.
감사합니당~
'JAVA' 카테고리의 다른 글
[JAVA] RestTemplate 개념 알아보기! 간단 예제 포함! (0) | 2024.05.16 |
---|---|
자바 성능 튜닝 정보 알아보기! (0) | 2024.01.30 |
[Reactive Java] Spring WebFlux에서 Error 다루기 (0) | 2021.02.23 |
[JAVA8] 람다 표현식을 조합할 수 있는 유용한 메서드 알아보기 (0) | 2019.04.19 |
[JAVA8] Lambda(람다)에서 지역변수 사용하기 (0) | 2019.04.17 |