본문 바로가기

JPA/JPA 기본

JPA- 방언,구동방식

 

데이터베이스 방언

 

• JPA는 특정 데이터베이스에 종속 X

• 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다름

• 가변 문자: MySQL은 VARCHAR, Oracle은 VARCHAR2

• 문자열을 자르는 함수: SQL 표준은 SUBSTRING(), Oracle은 SUBSTR()

• 페이징: MySQL은 LIMIT , Oracle은 ROWNUM

• 방언: SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능

설정에 따라 SQL 생성해준다

 

• hibernate.dialect 속성에 지정

• H2 : org.hibernate.dialect.H2Dialect

• Oracle 10g : org.hibernate.dialect.Oracle10gDialect

• MySQL : org.hibernate.dialect.MySQL5InnoDBDialect

• 하이버네이트는 40가지 이상의 데이터베이스 방언 지원

 

 

 

JPA 구동 방식

 

앤티티 매니저 팩토리 생성

 

Persistence 클래스를 사용하여앤티티 매니저 팩토리를 생성하여 JPA를 사용할 수 있게 준비한다.

 

EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa");

 

JPA구현체에 따라서는 데이터베이스 커넥션 풀도 생성하므로 엔티티 매니저 팩토리를 생성하는 비용은 크다.

 

따라서 앤티티 매니저 팩토리는 애플리케이션 전체에서 딱 한 번만 생성하고 공유해서 사용해야 한다 !

 

앤티티 매니저 생성

 

EntityMAnagerFactory em = emf.createEntityManager();

 

JPA의 기능 대부분은 엔티티 매니저가 제공한다.

 

대표적으로 앤티티 매니저를 사용해서 데이터베이스에 등록/수정/삭제 /조회 할 수 있다.

 

종료

 

마지막으로 사용이 끝난 엔티티 매니저는 반드시 종료해야한다.

 

em.close();

 

에플리케이션을 종료할 때 엔티티 매니저 팩토리도 다음처럼 종료해야 한다.

 

emf.close();

 

 

객체와 테이블을 생성하고 매핑하기

 

• @Entity: JPA가 관리할 객체

• @Id: 데이터베이스 PK와 매핑

 

package datajpa.datajpa.domain;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
@Getter
@Setter
@ToString
public class Member {
    @Id
    @GeneratedValue
    private Long id;
    private String username;

    
}

 

DDL

create table Member (

id bigint not null,

name varchar(255),

primary key (id) );

 

 

• 회원 등록

• 회원 수정

• 회원 삭제

• 회원 단 건 조회

 

 

public class JpaMain {

    public static void main(String[] args) {

        //엔티티 매니저 팩토리 생성
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook");
        EntityManager em = emf.createEntityManager(); //엔티티 매니저 생성

        EntityTransaction tx = em.getTransaction(); //트랜잭션 기능 획득

        try {


            tx.begin(); //트랜잭션 시작
            logic(em);  //비즈니스 로직
            tx.commit();//트랜잭션 커밋

        } catch (Exception e) {
            e.printStackTrace();
            tx.rollback(); //트랜잭션 롤백
        } finally {
            em.close(); //엔티티 매니저 종료
        }

        emf.close(); //엔티티 매니저 팩토리 종료
    }

    public static void logic(EntityManager em) {

        String id = "id1";
        Member member = new Member();
        member.setId(id);
        member.setUsername("지한");
        member.setAge(2);

        //등록
        em.persist(member);

        //수정
        member.setAge(20);

        //한 건 조회
        Member findMember = em.find(Member.class, id);
        System.out.println("findMember=" + findMember.getUsername() + ", age=" + findMember.getAge());

        //목록 조회
        List<Member> members = em.createQuery("select m from Member m", Member.class).getResultList();
        System.out.println("members.size=" + members.size());

        //삭제
        em.remove(member);

    }
}

 

 

 

 

'JPA > JPA 기본' 카테고리의 다른 글

JPA-고급 매핑  (0) 2022.04.28
JPA-다양한 연관관계 매핑  (0) 2022.04.28
JPA-연관관계 매핑 기초  (0) 2022.04.28
JPA-엔티티 매핑  (0) 2022.04.27
JPA-영속성 관리  (0) 2022.04.27