본문 바로가기

JPA

JPA로 CRUD해보기(3) Entity와 CRUD 코드 작성해보기

드디어 CRUD를 직접 해보는 시간이다. 기대되지 않나??? 아니면 말고 ㅋㅋㅋㅋ

 

JPA에는 Entity라는 개념이 존재한다. Entity는 쉽게 테이블 구조를 객체로 변환한 것이라고 생각하면 된다.

Entity가 낯설다면 VO 혹은 DTO같은 역할이라고 생각하면 이해가 더 쉽다.

백문이불여일견, hellojpa 패키지 아래에 Member class를 만들어주자~~~

package hellojpa;

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

@Entity //꼭 넣어야 된다. 이 Entity Annotation이 붙어있어야 JPA가 관리한다.
@Table(name = "MEMBER") //Table명과 클래스명이 같으면 생략이 가능하다.
public class Member {
    @Id //PK라는 것을 명시해주는 Annotation; 필수
    private Long id;
    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;
    }
}

우리가 첫 시간에 만들었던 DB 구조(컬럼)와 클래스 구조(필드)가 일치하는 것을 확인할 수 있다.

(지금 컬럼명과 필드명을 똑같이 맞춰놨는데 @Column 어노테이션을 사용하면 다르게 하는 것도 가능)

@Entity라는 어노테이션이 붙어있어야 JPA가 해당 Entity를 관리해주면서 우리가 원하는대로 동작한다.

@Table 어노테이션은 해당 클래스가 어느 Table가 매핑되는 것인지 명시해주는 것으로
클래스명과 Table명이 철자가 똑같다면(대소문자 상관 X) 명시해주지 않아도 된다.

@Id는 해당 필드가 테이블에서 Primary Key 역할이라는 것을 뜻하는 필수 어노테이션이다.


데이터 추가해보기

JPA로 CRUD해보기(2) 틀 코드 작성하기 시간에 만들었던 JpaMain.java의 "//CRUD 로직" 부분에 다음과 같이 코드를 작성해보자!!!

Member member = new Member();
member.setId(1L);
member.setName("codeMania");
em.persist(member);

코드를 실행해보면 persist함수가 호출되면서 쿼리가 날아가는 것을 확인할 수 있다.

쿼리가 콘솔에 찍히지 않는다면 CRUD 1편과 persistence.xml 설정을 참고하자!!!

하지만 2번 연속 실행하면 에러가 날 것이다. 이는 Id가 PK인데 같은 Id 값을 2번 연속으로 넣어주면서 생기는 문제이므로,
Id값만 겹치지 않게 바꾸면서 실행해주면 문제없이 실행될 것이다.

 

그리고 이렇게 실행한 쿼리에 의해서 DB에도 값이 깔끔하게 들어간 것을 확인할 수 있다.


데이터 조회해보기

이번에는 조회 코드를 작성해보자!!!!

추가 코드를 작성했던 것처럼 "//CRUD 로직" 부분에 코드를 작성해주면 된다.

Member findMember = em.find(Member.class, 1L); // 조회
System.out.println("findMember.id = " + findMember.getId());
System.out.println("findMember.name = " + findMember.getName());

find함수를 통해 가볍게(?) 데이터가 조회되는 모습이다.


데이터 수정해보기

JPA와 함께라면 정말정말 누워서 껌먹기인 수정을 해보자~~~

Member findMember = em.find(Member.class, 1L); // 조회
findMember.setName("code-lover"); // 수정

이렇게 코드를 작성해주면 끝난다!!! 그냥 끝!! console에 찍히는 쿼리들도 확인해보자

find함수를 수행하면서 select쿼리가 한 번 그리고 트랜잭션이 커밋되면서 update 쿼리가 한 번 날아가는 것을 볼 수 있다.
우리는 setName만 해줬을 뿐 어떤 코드도 작성하지 않았는데 어떻게 수정이 됐을까? JPA(find 함수)를 통해서 Entity 조회 시 해당 객체는 JPA가 관리한다.

그 후 트랜잭션 커밋 시 JPA가 관리 중인 객체의 변경여부를 검사해서 값이 변경됐을 경우 update 쿼리를 날려서 값을 수정해주는 것이다.

h2 콘솔에 가서 확인해보면 수정이 잘 된 것을 볼 수 있다.

 

 

 


데이터 삭제해보기

마지막으로 데이터 삭제 코드를 작성해보자!!!

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

삭제 코드도 정말 간단하다.

쿼리가 왜 이렇게 나왔는지 생각해보고 h2 콘솔은 잘 반영됐는지 확인해보고 이번 시간을 마무리하도록 하자!!!

 

참고강의: 배달의 민족 개발팀장 김영한 강사님의 JPA 강의

'JPA' 카테고리의 다른 글

영속성 컨텍스트  (0) 2021.02.13
JPA로 CRUD해보기(4) JPQL  (0) 2021.02.09
JPA로 CRUD해보기(2) 틀 코드 작성하기  (0) 2021.02.08
JPA로 CRUD해보기(1) DB 구축하기  (0) 2021.02.08
JPA로 CRUD해보기(0) 프로젝트 생성  (0) 2021.02.08