티스토리 뷰
Hello JPA
JPA에서는 크게 중요한게 두가지가 있다. 첫번째는 객체와 관계형 데이터베이스를 중간에서 매핑하는 과정, 즉 설계 과정이 있고, 두번째는 JPA가 어떤 방식으로 동작하는지(영속성 컨텍스트)이며 이 두가지에 대해 이해 하는 것이 중요하다.
H2
최고의 실습용 DB, 가볍다(1.5MB)
웹용 쿼리툴 제공
MySQL, Oracle 데이터베이스 시뮬레이션 기능
Sequence, AUTO INCREMENT 기능 지원
객체 매핑하기
@Entity
JPA가 관리할 객체, 엔티티라고 한다.
@Id
DB PK와 매핑할 필드
persistence.xml
jpa 설정 파일
/META-INF/persistence.xml 위치
javax.persistence로 시작 : JPA 표준 속성
hibername로 시작 : 하이버 네이트 전용 속성
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.2">
<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"/>
</properties>
</persistence-unit>
</persistence>
dialect는 데이터베이스 방언이라는 뜻인데,
데이터베이스 방언
JPA는 특정 데이터베이스에 종속적이지 않은 기술
각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다르다
가변 문자 : MySQL은 VARCHAR, Oracle은 VARCHAR2
문자열을 자르는 함수 : SQL 표준은 SUBSTRING(), Oracle은 SUBSTR()
페이징 : MySQL은 LIMIT, Oracle은 ROWNUM
방언 : SQL 표준을 지키지 않거나 특정 데이터베이스 만의 고유한 기능
Dialect를 사용하면 각 DB에 맞는 SQL을 생성해 준다.
hibernate.dialect 속성에 지정
H2 : org.hibernate.dialect.H2Dialect
Oracle 10g : org.hibernate.dialect.Oracle10gDialect
MySQL : org.hibernate.dialect.MySQL5InnoDBDialect
하이버네이트는 45가지 방언을 지원
애플리케이션 개발
엔티티 매니저 팩토리 설정
Persistence를 통해서 xml설정을 읽고, EntityManagerFactory를 만들어야 한다.
트랜잭션 단위로 기능을 만들때 항상 엔티티 매니저를 새로 만들어야 한다. EntityManagerFactory를 통해서 만든다.
엔티티 매니저 설정
트랜잭션
비즈니스 로직(CRUD)
주의할 점
엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유
엔티티 매니저는 쓰레드간에 공유하면 안된다(사용하고 버려야 한다.)
JPA의 모든 데이터 변경은 트랜잭션 안에서 실행
package basic;
import basic.entity.Member;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class Main {
public static void main(String[] args) {
EntityManagerFactory entityManagerFactory =
Persistence.createEntityManagerFactory("hello");
EntityManager em = entityManagerFactory.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Member member = new Member();
member.setId(100L);
member.setName("name");
em.persist(member);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
entityManagerFactory.close();
}
}
Reference
자바 ORM 표준 JPA 프로그래밍
저자 직강 -
'ICT Eng > JPA' 카테고리의 다른 글
[JPA] 단방향 연관관계 (0) | 2019.08.16 |
---|---|
[JPA] Spring Data JPA와 QueryDSL 이해, 실무 경험 공유 (18) | 2019.04.30 |
[JPA] 객체지향 쿼리, JPQL (1) | 2019.04.26 |
[JPA] 필드와 컬럼 매핑 (0) | 2019.04.22 |
[JPA] ORM과 JPA 소개, SQL 중심적인 개발의 문제점 (1) | 2019.04.22 |
- Total
- Today
- Yesterday
- 자바
- Vue.js
- Raspberry Pi
- 라즈베리파이
- AWS
- github
- 정렬
- Spring Boot
- 한밭이글스
- Spring
- IT융합인력양성사업단
- ORM
- 순환
- Wisoft
- Java
- 젠킨스
- JPA
- springboot
- 인프런
- 한밭대학교
- 무선통신소프트웨어연구실
- Algorithm
- vuex
- vuejs
- 알고리즘
- 스프링부트
- Recursion
- 시간복잡도
- RBT
- 레드블랙트리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |