Programming/JPA

JPA로 CRUD 구현하기_(3)CRUD 구현

Deveun 2021. 8. 20. 23:04

** 이전게시글 참고:

2021.08.20 - [Programming/JPA] - JPA로 CRUD 구현하기_(2)객체와 테이블 매핑

 

 

1. CRUD 구현하기

실습에서는 JPA를 이용한 CRUD를 구현하지만, Mybatis나 다른 DB 접근방법으로 변경되어도 프로젝트의 상위계층(service)에는 영향이 없도록 하기 위해서 MemberRepository 인터페이스를 상속하는 JPA 구현 클래스를 생성한다.

 

[repository/MemberRepository.java]

package repository;

import vo.Member;

public interface MemberRepository {
    public void save(Member newMember);
    public Member findById(String id);
    public void update(String id, String username, Integer age);
    public void delete(String id);
}

 

[infra/JpaMemberRepository.java]

package infra;

import infra.utils.JpaUtil;
import repository.MemberRepository;
import vo.Member;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;

public class JpaMemberRepository implements MemberRepository {

    private EntityManager em;
    private EntityTransaction tx;

    public JpaMemberRepository() {
        em = JpaUtil.getEmf().createEntityManager();
        tx = em.getTransaction();
    }

    @Override
    public void save(Member newMember) {
        tx.begin();
        em.persist(newMember);
        tx.commit();

    }

    @Override
    public Member findById(String id) {
        return em.find(Member.class, id);
    }

    @Override
    public void update(String id, String username, Integer age) {
        tx.begin();
        Member member = em.find(Member.class, id);
        member.setUsername(username);
        member.setAge(age);
        tx.commit();
    }

    @Override
    public void delete(String id) {
        tx.begin();
        Member member = em.find(Member.class, id);
        em.remove(member);
        tx.commit();
    }
}

 

o 등록: em.persist() 메소드를 통해 저장할 엔티티를 넘겨준다. 

o 한건 조회: em.find() 메소드는 @Id로 매핑된 식별자로 DB를 조회하고, 해당 결과로 엔티티를 생성하여 반환한다.

o 수정: JPA는 변경된 엔티티를 자동감지하는 기능이 있다. 영속성을 가진 엔티티 값이 변경되면 DB 데이터도 바뀐다.

o 삭제: em.remove() 메소드에 삭제하려는 엔티티를 넘겨준다.

 

* Transaction에 대한 부분은 이번 실습에서 다루지 않았기 때문에, repository 메소드 단위로만 간단히 설정하였다.

 

이제 CRUD 기능이 다 구현되었다.

다음 게시글에서는 해당 기능들을 비즈니스 로직에서 사용하여 프로젝트를 완성해보자.

 

 

 

[참고서적] 자바 ORM 표준 JPA 프로그래밍, 김영한 저자

[참고서적] DDD START! 도메인 주도설계 구현과 핵심 개념 익히기, 최범균 저자

[참고] https://www.javaguides.net/2018/12/jpa-crud-example.html