티스토리 뷰

Spring/JPA

JPA 시작

땅속 디그다 2022. 8. 3. 15:55

🔨 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 : 필수 속성, 옵션 속성들 기입
    1. Connection
      • 정보 기입 (driver, user, password, url)
    2. dialect
      • 데이터 베이스 방언 기입 각각의 데이터 베이스 마다 제공하는 SQL 문법과 함수가 조금씩 다르기 때문
    3. options
      • 로그 찍어주기, table 생성 방식, 등등

✅ 스프링에서는 persistence.xml 보다는 주로 yml로 관리 된다.


🛠 그래서 어떻게 사용해?

  1. 설정한 persistence unit name 으로 Entity Manager Factory를 생성
  2. EntityMangerFactory에서 entityManger를 가져온다.
  3. 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
링크