[우아한형제들 김영환님의 인프런 강의 자바 ORM 표준 JPA 프로그래밍 - 기본편을 수강하고 정리한 내용입니다]
개발 환경
- Java 8
- Maven Project
- H2 Database(H2 Database Engine)
JPA 설정
persistence.xml
- /META-INF/persistence.xml 위치
- persistence-unit name으로 이름 지정
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
version="2.2">
<persistence-unit name="jpa-application">
<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>
<property name="hibernate.format_sql" value="true"></property>
<property name="hibernate.use_sql_comments" value="true"></property>
</properties>
</persistence-unit>
</persistence>
hibernate.dialect
- JPA는 특정 데이터베이스에 종속되지 않는다.
- SQL 표준을 지키지 않는 특정 데이터베이스의 고유한 기능, 문법들을 JPA는 자동 지원한다.
JPA 구동 방식
- EntityManagerFactory는 하나의 EntityManager를 생성한다.
- EntityManager은 Entity를 저장, 수정, 삭제, 조회하는 등의 엔티티와 관련된 모든 일을 처리한다.
JPA 동작 확인
Entity 생성
@Entity : JPA가 관리할 객체
@ID : 데이터베이스 PK와 매핑
@Entity
public class Member {
@Id
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
데이터 삽입(persist)
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa-application");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Member m = new Member();
m.setId(100L);
m.setName("춘식이");
em.persist(m); //persist = save
tx.commit();
}catch (Exception e) {
tx.rollback();
}
em.close();
emf.close();
}
데이터 조회(find)
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa-application");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Member m = em.find(Member.class, 100L);
System.out.println("m's Id : "+ m.getId());
System.out.println("m's Name : "+ m.getName());
tx.commit();
}catch (Exception e) {
tx.rollback();
}
em.close();
emf.close();
}
데이터 수정
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa-application");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Member m = em.find(Member.class, 100L);
m.setName("수정된 춘식이");
tx.commit();
}catch (Exception e) {
tx.rollback();
}
em.close();
emf.close();
}
데이터 삭제(remove)
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa-application");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Member m = em.find(Member.class, 100L);
em.remove(m);
tx.commit();
}catch (Exception e) {
tx.rollback();
}
em.close();
emf.close();
}
주의사항
- 엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유
- 엔티티 매니저는 쓰레드간에 공유X
- JPA의 모든 데이터 변경은 트랜잭션 안에서 실행 (= 하나의 세션)
반응형
'Backend > JPA' 카테고리의 다른 글
[JPA/Java Persistence API] 고급매핑 (0) | 2021.06.03 |
---|---|
[JPA/Java Persistence API] 다양한 연관관계 매핑 (1) | 2021.05.30 |
[JPA/Java Persistence API] 엔티티 연관관계 (0) | 2021.05.23 |
[JPA/Java Persistence API] 엔티티 매핑 (0) | 2021.05.16 |
[JPA/Java Persistence API] 영속성 컨텍스트 (0) | 2021.05.10 |