Free Lines Arrow
본문 바로가기
DataBase/JPA

[JPA] JPA CRUD 기본

by skahn1215 2021. 7. 30.
728x90
반응형

JPA 객체 맵핑하는 법을 알아보자.

 

Member Class 생성후 맵핑하기

  • @Entity: 어노테이션을 선언해 주면 JPA 가 해당 어노테이션을보고 인식한다.
  • @Table: 어노테이션을 이용하여 객체를 저장할 테이블 명을 따로 지정해줄수 있다.
    - 기본값은 클래스 명이다.
  • @Id 로 PK 를 설정한다.
  • @Column 으로 컬럼 이름을 지정해 줄수 있다.

 

 

 

 

Member Class 

package hellojpa;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;


@Entity // 꼭넣어야 한다. // JPA가 로딩 될때 해당 어노테이션을 보고 인식한다.
//@Table(name = "USER") // 테이블명 지정
public class Member {

    @Id //PK 설정
    private Long id;


    // 컬럼이름을 지정해준다.
    // @Column(name = "usrname")
    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;
    }
}

 

 

 

 

 

 

 

JPA 사용해보기

  • persistence.xml 의 정의된 설정 정보로 EntityManagerFactory 를 생성한다.
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");​


  • EntityManagerFactory 에서 EntityManager 를 꺼내온다.
    EntityManager em = emf.createEntityManager();​


  • EntityManager 에서 트랜잭션을 가져오고 Try Catch 문안에서 수행해준다.
    트랜잭션을 가져오는 이유는 반드시 JPA의 데이터 변경연산은 트랜잭션 안에서 수행되어야 하기 때문이다.
    EntityTransaction tx = em.getTransaction();
    tx.begin();
    
    try {
        // JPA CRUD 로직 구현
       
        tx.commit(); // commit 을 해야 DB에 반영됨
    } catch (Exception e) {
        tx.rollback(); // 반드시 에러 발생시 롤백
    } finally {
        em.close(); // Entity manager 종료
    }
    
     emf.close(); // Entity Manager Factory 종료

 

 

 

 

JPA CRUD 구현하기

  • 저장: 저장은 EntityManager 의 persist 함수를 호출하여 객체를 넘겨주면 된다.
    Member member = new Member();
    member.setId(1L);
    member.setName("Hello");
    em.persist(member);


  • 조회: 조회는 EntityManager의 find 함수를 호출하여 조회 한다.
    Member findMember = em.find(Member.class, 1L);
    System.out.println("memberId: " + findMember.getId());
    System.out.println("memberName: "+findMember.getName());​


  • 삭제: 삭제는 EntityManager의 remove 함수를 호출한다.
    Member findMember = em.find(Member.class, 1L);
    em.remove(findMember);​


  • 수정: 수정은 영속성 인 객체를 꺼내와서 setter로 값만 바꾸면 알아서 update가 된다.
    Member findMember = em.find(Member.class, 1L);
    findMember.setName("Hi");​

 

 

 

 

구현

package hellojpa;

import javax.persistence.*;
import java.util.List;

public class JpaMain {
    public static void main(String[] args) {
        // persistence.xml 의 persistence-unit name="hello" 를 넘긴다.
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

        // 매니저를 꺼내온다.
        EntityManager em = emf.createEntityManager();

        // 트랜잭션 얻어오고 실행한다.
        // JPA 는 트랜잭션 안에서 수행되어야 한다.
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        // exception 처리를 위해 try catch 문을 반드시 사용해야된다.
        try {
            // code 작성
            // 저장로직
            /*
            Member member = new Member();
            member.setId(1L);
            member.setName("Hello");
            em.persist(member);
             */

            // 찾기로직
            /*
            Member findMember = em.find(Member.class, 1L);
            System.out.println("memberId: " + findMember.getId());
            System.out.println("memberName: "+findMember.getName());
            */

            // 삭제로직
            /*
            Member findMember = em.find(Member.class, 1L);
            em.remove(findMember);
            */

            // 수정로직
            // 수정 로직은 영속성 객체를 가져왔기 때문에
            // 따로 em을 이용하지 않고 변경 가능하다.
            // commit 직전에 update 쿼리를 생성후
            // commit 한다.
            /*
            Member findMember = em.find(Member.class, 1L);
            findMember.setName("Hi");
            */

            // JPQL 사용
            // 복잡한 쿼리 작성시.
            // 대상은 객체가 된다.
            List<Member> resultList = em.createQuery("select m from Member as m", Member.class)
                    .getResultList();
            for(Member  member : resultList) {
                System.out.println("memberId: " + member.getId());
                System.out.println("memberName: " + member.getName());
            }

            // 커밋시 쿼리 수행
            tx.commit();
        } catch (Exception e) {
            tx.rollback();
        } finally {
            em.close();
        }


        emf.close();


    }
}

 

 

 

 

 

참고:

https://www.inflearn.com/course/ORM-JPA-Basic/lecture/21686?speed=1&tab=curriculum&mm=close 

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

 

728x90
반응형

'DataBase > JPA' 카테고리의 다른 글

[JPA] 플러시  (0) 2021.07.30
[JPA] 영속성 컨텍스트  (0) 2021.07.30
[JPA] JPA 환경설정  (0) 2021.07.29
[JPA] JPA 란?  (0) 2021.07.28
[JPA] JPA를 사용하는 이유  (0) 2021.07.27

댓글