본문 바로가기

JAVA

JPA + Hibernate 설치 및 구성 알아보기!

728x90
반응형

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>

 

오늘은 여기까지 입니다. 

감사합니당~

728x90
반응형