JPA

awarduuu·2023년 5월 4일
0

Java Persistence API의 준말로, 자바 진영 ORM 기술 표준으로 쓰이는 인터페이스의 모음이다.

  • DAO와 JDBC 사이에서 객체와 테이블을 매핑하여 패러다임 불일치를 개발자 대신 해결해준다.

1. JPA를 왜 사용해야 하는가?

  • SQL 중심적인 개발에서 객체 중심으로 개발
  • 생산성
  • 유지보수
  • 패러다임 불일치 해결
  • 성능
  • 데이터 접근 추상화와 벤더 독립성 (DB제품에 의존적이지 않다)

2. CRUD

  • insert : persist()
  • select : find()
  • update : setter()
  • delete : remove()

3. 매핑

@Entity

: JPA가 이용할 객체 엔티티임을 표시

@Id

: DB PK와 매핑할 필드 표시


@Entity
public class Member {  

@Id
private Long id;
private String name;
}

persistence.xml

  • JPA 설정 파일
  • /META-INF/persistence.xml 위치
  • javax.persistence로 시작 : JPA 표준 속성
  • hibernate로 시작 : 하이버네이트 전용 속성
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">

<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.id.new_generator_mappings" value="true" />
<!--<property name="hibernate.hbm2ddl.auto" value="create" />--> </properties>
</persistence-unit> </persistence>

4. 애플리케이션 개발

  • 엔티티 매니저 팩토리 설정
  • 엔티티 매니저 설정
  • 트랜잭션
  • 비즈니스 로직 (CRUD)

5. 객체지향 쿼리 JPQL

엔티티 객체를 대상으로 사용하는 객체지향 쿼리 언어

: JPA를 이용하면 엔티티 객체 중심으로 개발하기 때문에 검색쿼리에서 문제가 생긴다. 왜냐하면 테이블이 아닌 객체를 대상으로 검색해야되기 때문이다. 이를 해결하기 위해 애플리케이션에서 필요한 데이터만 DB에서 불러오려면 검색 조건이 필요한 SQL문이 필요한데 JPQL이 바로 그것이다.

profile
선한 영향력을 만드는 개발자

0개의 댓글