course/inflearn

[JPA 프로그래밍 기본편] JPA 시작하기

hjkim0502 2022. 8. 30. 10:18

1. 환경 세팅

  • h2 database 사용
  • maven 설정
    • hibernate 버전은 사용하고자 하는 스프링 버전에 맞는 것으로 설정하면 좋다
      • spring.io -> projects -> spring boot -> Learn -> 스프링 버전에 맞는 doc -> 'org.hibernate'로 검색해 버전 확인
    • h2는 설치한 버전과 같아야 한다
  • JPA 설정: /META-INF/persistence.xml
    • persistance-unit에 name속성으로 이름 지정
    • javax.persistence.~~ : JPA 표준 속성
    • hibernate.~~ : hibernate 전용 속성
    • DB 방언: DB마다 구문에 차이가 있기 때문에 어떤 방언을 사용할 것인지 알려주어야 한다
      • hibernate는 40가지 이상의 DB 방언 지원
      • 우리는 h2이기 때문에 org.hibernate.dialect.H2Dialect

2. 실습

  • h2 console에 테이블 생성
create table Member (
    id bigint not null,
    name varchar(255),
    primary key (id)
);
  • 객체를 테이블과 매핑되게 생성
@Entity
public class Member {

    @Id
    private Long id;
    private String name;
    
    //Getter & Setter
  • 회원 CRUD
public class JpaMain {
    public static void main(String[] args) {
        // 애플리케이션 로딩 시점에 팩토리 하나만 생성
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

        // 트랜잭션 하나 당 매니저 하나 생성 (사용 후 버림)
        EntityManager em = emf.createEntityManager();

        // 트랜잭션 시작 (데이터 변경은 꼭 이 안에서 실행)
        EntityTransaction tx = em.getTransaction();
        tx.begin();


        try {
            //저장
            Member member = new Member();
            member.setId(1L);
            member.setName("Hello");

            em.persist(member);

            //조회
            Member findMember = em.find(Member.class, 1L);

            //더 복잡한 쿼리로 조회 (JPQL)
            //엔티티 대상(Member)으로 하는 객체 지향 쿼리
            //설정 파일에서 다른 DB 방언으로 설정만 하면 코드 수정 불필요
            List<Member> result = em.createQuery("select m from Member as m", Member.class)
                    .getResultList();

            //수정
            //커밋 시점에 JPA가 관리하는 엔티티에 변경된 것이 보이면 알아서 update 쿼리 날림
            findMember.setName("HelloJpa");

            //삭제
            em.remove(findMember);

            tx.commit(); //DB에 반영
        } catch (Exception e) {
            tx.rollback();
        } finally { // 트랜잭션 종료 후 매니저 종료 중요!
            em.close();
        }

        emf.close();
    }
}

 

출차: 출처: 인프런 김영한님 JPA 프로그래밍 - 기본편