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] 영속성 컨텍스트 (1) | 2021.07.30 | 
| [JPA] JPA 환경설정 (0) | 2021.07.29 | 
| [JPA] JPA 란? (0) | 2021.07.28 | 
| [JPA] JPA를 사용하는 이유 (0) | 2021.07.27 | 
 
		
	
                
                
                
                
                
                
                
                                                
                
                
                
 
										
									 
										
									 
										
									
댓글