** 이전게시글 참고:
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
'Programming > JPA' 카테고리의 다른 글
SQL Mapper와 ORM 차이 (0) | 2021.08.22 |
---|---|
JPA로 CRUD 구현하기_(4)비즈니스 로직 수행 (0) | 2021.08.20 |
JPA로 CRUD 구현하기_(2)객체와 테이블 매핑 (0) | 2021.08.20 |
JPA로 CRUD 구현하기_(1)프로젝트 생성 (0) | 2021.08.20 |