DB

[JPA] JPA란 (2) - JPA 프로젝트 생성, JPQL

milna 2023. 10. 25. 04:40
<dependencies> 
 <!-- JPA 하이버네이트 --> 
 <dependency> 
 <groupId>org.hibernate</groupId> 
 <artifactId>hibernate-entitymanager</artifactId> 
 <version>5.3.10.Final</version> 
 </dependency> 
 <!-- H2 데이터베이스 --> 
 <dependency> 
 <groupId>com.h2database</groupId> 
 <artifactId>h2</artifactId> 
 <version>1.4.199</version> 
 </dependency> 
 </dependencies>

pom.xml에 라이브러리를 추가한다.

 

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.2" 
 xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"> 
 <persistence-unit name="hello"> 
 <properties> 
 <!-- 필수 속성 --> 
 <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> 
 <property name="javax.persistence.jdbc.user" value="sa"/> 
 <property name="javax.persistence.jdbc.password" value=""/> 
 <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/> 
 <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> 
 
 <!-- 옵션 --> 
 <property name="hibernate.show_sql" value="true"/> 
 <property name="hibernate.format_sql" value="true"/> 
 <property name="hibernate.use_sql_comments" value="true"/> 
 <!--<property name="hibernate.hbm2ddl.auto" value="create" />--> 
 </properties> 
 </persistence-unit> 
</persistence>

resources/META-INF 경로에 persistence.xml 파일을 생성한다.

 

javax.persistence.~ : JPA 표준 속성

hibernate.~ : 하이버네이트 전용 속성

 

* hibernate.dialect

각각 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다르다.

hibernate.dialect 속성에 데이터베이스를 지정하면 SQL 표준을 지키지 않는 특정 데이터베이스 만의 고유한 기능을 지원해준다.

H2 : org.hibernate.dialect.H2Dialect

Oracle 10g : org.hibernate.dialect.Oracle10gDialect

MySQL : org.hibernate.dialect.MySQL5InnoDBDialect

 

 

JPA 구동 방식

@Entity : JPA가 관리할 객체

@Id : 데이터베이스 PK와 매핑

 

EntityManagerFactory는 하나만 생성해서 애플리케이션 전체에 공유한다.

EntityManager는 쓰레드 간에 공유되지 않는다. (사용하고 버려야 함)

JPA의 모든 데이터 변경은 트랜잭션 안에서 실행된다.

 

 

JPQL

JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공한다.

SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원. (SQL과 문법이 유사!)

 

엔티티 객체를 중심으로 개발

테이블이 아닌 엔티티 객체를 대상으로 검색하는 객체 지향 쿼리

특정 데이터베이스 SQL에 의존하지 않는다.