티스토리 뷰
🔨 jpa 시작
JPA 설정파일
<?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="JpaShop">
<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/~/jpashop"/>
<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>
- persistence unit : 주로 데이터 베이스 하나당 하나로 만든다. unit 이름으로 구분하게 된다.
- properties : 필수 속성, 옵션 속성들 기입
- Connection
- 정보 기입 (driver, user, password, url)
- dialect
- 데이터 베이스 방언 기입 각각의 데이터 베이스 마다 제공하는 SQL 문법과 함수가 조금씩 다르기 때문
- options
- 로그 찍어주기, table 생성 방식, 등등
- Connection
✅ 스프링에서는 persistence.xml 보다는 주로 yml로 관리 된다.
🛠 그래서 어떻게 사용해?
- 설정한 persistence unit name 으로 Entity Manager Factory를 생성
- EntityMangerFactory에서 entityManger를 가져온다.
- entityManager를 사용해서 비지니스 로직을 굴린다.
🖥 코드로 살펴보자
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("JpaShop");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
/**
* 핵심 비지니스 로직 사용 Transaction 단위
*/
tx.commit();
}
catch (Exception e){
tx.rollback();
}
finally {
em.close();
}
emf.close();
}
}
❌ Connection Pool hibernate 기본 내장 커넥션 풀을 사용 spring boot 2.0 부터 hikari-pool 이다
동작하는 방식
1) JPA 실행 즉 EntityManagerFactory 를 생성
2) @Entity 를 scan 하여 영속성의 대상으로 인식
3) ddl auto의 조건에 따라서 테이블 create, update 등 을 결정
❗ entityManagerFactory 는 Application 당 하나지만 entityManager 는 프록시로서 Thread-safe
🖥 @Entity 코드
@Entity
public class Member {
@Id @GeneratedValue(strategy = AUTO)
@Column(name = "MEMBER_ID")
private Long id;
private String name;
}
❗ 항상 Transaction 을 open할 필요는 없다. 조회시에는 필요없다.
'Spring > JPA' 카테고리의 다른 글
프록시와 연관관계 관리 (0) | 2022.08.23 |
---|---|
고급 매핑 (0) | 2022.08.23 |
JPA - 연관관계 이해하기 (0) | 2022.08.03 |
JPA - 엔티티 매핑 (0) | 2022.08.03 |
JPA - 영속성 컨텍스트 (2) | 2022.08.03 |
댓글
01-22 14:52
- Total
- Today
- Yesterday
링크