티스토리 뷰

JPA

객체-테이블 매핑과 기본 동작 확인

복슬회고 2021. 4. 17. 18:00

JPA 기초 1 

 

기본적인 객체-테이블 매핑과 동작을 확인한다 

 

데이터베이스는 H2를 사용하였다

연습을 위해 간단한 회원 정보를 담을 MEMBER 테이블을 만든다

테이블에 들어갈 내용과 생성 쿼리문은 아래와 같다

컬럼명 데이터 타입 PK/FK 내용
ID BIGINT PK 회원 고유 넘버
NAME VARCHAR(255) - 회원 이름
MSG VARCHAR(255) - 회원 한마디

 

create table MEMBER (
 id bigint not null,
 name varchar(255),
 msg varchar(255),
 primary key (id)
);

 

 

테이블에 대응되는 클래스를 작성한다

@Entity : JPA가 관리할 엔티티 객체임을 선언
@Id : JPA의 객체 식별 기본자이자 테이블의 PK를 지정 
@Entity
public class Member {

    @Id
    private Long id;
    private String name;
    private String msg;
    
    //Constructor 메소드 생략
    //Getter, Setter 메소드 생략
}

 

 

테이블에 데이터 저장하기

public class JpaMain {

    public static void main(String[] args) {
    
    	//persistence 설정 정보를 바탕으로 EntityManage를 생성할 Factory를 생성
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
        
        //엔티티를 관리할 EntityManager를 생성
        EntityManager em = emf.createEntityManager();
        
        //트랜잭션을 생성
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        
        try {
        	//persist(Object o)메소드로 데이터를 저장
            Member kim = new Member(1L, "kim", "안녕하세요");
            em.persist(kim);
            tx.commit();
            
        }catch(Exception e){
        	//예외 발생 시 롤백
            tx.rollback();
            
        }finally {
        	//DB 커넥션을 반환한다
            em.close();
        }
        
        //애플리케이션 종료 전 자원을 반환
        emf.close();
	}
}

메인 메소드에서 실제 데이터 등록까지 진행되는 과정은 다음과 같다

1. EntityManagerFactory 생성

2. EntityManager 생성

3. EntityTransaction 생성

4. transaction을 통해 EntityManager의 메소드 실행 / 이 때 sql 쿼리문이 자동 생성되어 동작한다

5. transaction에서 커밋 (또는 예외발생 시 롤백)

6. EntityManager close()로 DB 커넥션 반환

7. EntityManagerFactory close()로 자원 반환

 

스프링 / 스프링부트를 이용하여 실제 웹애플리케이션을 개발할 때는 위 과정이 간편하게 생략된다. 

애플리케이션 실행 후 콘솔에 들어가면 테이블에 데이터가 잘 들어간 것을 확인할 수 있다

 

 

테이블 데이터 삭제하기

잘못 들어간 cat 데이터를 삭제해보자

 

try {
	//PK인 id 값으로 조회 후 삭제
    Member findMember = em.find(Member.class, 4L);
    em.remove(findMember);
    tx.commit();
}

엔티티매니저를 통해 해당 엔티티 객체를 찾고, remove로 삭제한다

애플리케이션 설정 파일에서 sql 쿼리문을 콘솔창에 출력하도록 했다면,

id 값으로 데이터를 찾아 삭제하는 쿼리문을 JPA가 생성한 것을 볼 수 있다 

 

H2 콘솔창에서 cat의 데이터가 삭제된 것을 확인 가능하다

 

 

 

테이블 데이터 수정하기

park의 이름을 choi로 수정해보자

try {
	//PK인 id 값으로 조회 후 setter를 통해 값을 변경
    Member findMember = em.find(Member.class, 3L);
    findMember.setName("choi");
    tx.commit();
}

애플리케이션 실행 시, 데이터가 정상적으로 변경되는 걸 볼 수 있다

이는 트랜잭션이 커밋되기 전에 JPA가 관리하는 엔티티 값 변경을 감지해서 update 쿼리문을 작성해 실행해주기 때문이다

 

 

 

 

 

 

 

해당 포스트는 김영한 님의 인프런 JPA 강의를 듣고 참조해 복습 및 기록을 위해 작성하였습니다

좋은 강의이니 JPA 입문을 하고자 한다면 꼭 들어보시길 바랍니다 

www.inflearn.com/course/ORM-JPA-Basic#

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔

www.inflearn.com

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글