twocowsong

JPA - 비즈니스 로직 본문

IT/JPA

JPA - 비즈니스 로직

WsCode 2022. 4. 28. 21:19

깃허브 정리 URL : https://github.com/sWineTake/jpa.git

 

GitHub - sWineTake/jpa: 자바 ORM 표준 JPA 프로그래밍 - 김영한

자바 ORM 표준 JPA 프로그래밍 - 김영한. Contribute to sWineTake/jpa development by creating an account on GitHub.

github.com

 

Jpa (JpaMain.class)예제 코드는 아래와같습니다.

public static void main(String[] args) {
    // 엔티티 매니저 팩토리 생성
    EntityManagerFactory emf =
            Persistence.createEntityManagerFactory("jap-study");

    // 엔티티 매니저 생성
    EntityManager em = emf.createEntityManager();

    // 트랜잭션 획득
    EntityTransaction tx = em.getTransaction();

    try {
        // 트랜잭션시작
        tx.begin();
        // *** 비즈니스 로직 실행 ***

        // 트랜잭션 커밋
        tx.commit();
    }
    catch (Exception e) {
        tx.rollback(); // 롤백
    }
    finally {
        em.close();
    }
    // 엔티티 매니저 팩토리 종료
    emf.close();
}

코드는 크게 3부분으로 나뉘어 있습니다.

 

- 엔티티 매니저 설정

- 트랜잭션 관리

- 비즈니스 로직 (본 글의 주제)

 

비즈니스 로직

엔티티 매니저를 통해 DB에 등록, 수정, 삭제, 조회를 합니다.

public static void logic(EntityManager em) {
    String id = "id1";
    Member member = new Member();
    member.setId(id);
    member.setUsername("지한");
    member.setAge(2);

    // 등록
    em.persist(member);

    // 수정
    member.setAge(20);

    // 한건 조회
    Member findMember = em.find(Member.class, id);
    System.out.println("findMember = " + findMember.getUsername());
    System.out.println("age = " + findMember.getAge());

    // 목록 조회
    List<Member> members =
            em.createQuery("SELECT M FROM Member M", Member.class).getResultList();
    System.out.println("members.size= " + members.size());

    // 삭제
    em.remove(members);
}

출력 결과는 다음과 같습니다.

findMember=지한, age=20
members.size=1

등록, 수정, 삭제, 조회 작업이 엔티티 매니저를 통해서 수행됩니다.

 

이제 상세하게 코드를 분석해보겠습니다.

String id = "id1";
Member member = new Member();
member.setId(id);
member.setUsername("지한");
member.setAge(2);

// 등록
em.persist(member);

엔티티를 저장하려면 엔티티 매니저의 persist() 메소드에 저장할 엔티티를 넘겨주면 됩니다.

예제를 보면 회원 엔티티를 생성하고 em.persist(member)를 실행해서 엔티티를 저장했습니다.

 

JPA는 회원 엔티티 매핑정보를 분석해서 다음과 같은 SQL을 만들어 DB에 전달합니다.

INSERT INTO MEMBER(ID, NAME, AGE) VALUES('id1', '지환', 2)

 

저는 개인적으로 수정부분이 가장 이상하였습니다.

단순히 엔티티의 값만 변경했는데 JPA가 어떻게 업데이를진행한걸까요?

JPA는 어떤 엔티티가 변경되었는지 추적하는 기능을 가지고있습니다.

// 수정
member.setAge(20);

 

따라서 member.setage(20) 처럼 엔티티 값만 변경하면 다음과 같은 SQL문이 실행되게 됩니다.

UPDATE MEMBER
   SET AGE=20, NAME='지환'
 WHERE ID='id1'

 

엔티티를 삭제하려면 엔티티 매니저의 remove() 메소드에 삭제하려는 엔티티를 넘겨줍니다.

// 삭제
em.remove(members);

그렇게되면 아래와같은 SQL을 생성해서 실행합니다.

DELETE FROM MEMBER WHERE ID = 'id1'

 

find() 메소드는 조회할 엔티티 타입과 @Id로 DB테이블의 기본키와 매핑한 식별자 값으로 엔티티 하나를 조회하는 가장 단순한 조회 메소드입니다.

// 한건 조회
Member findMember = em.find(Member.class, id);
SELECT * FROM MEMBER WHERE ID='id1'

'IT > JPA' 카테고리의 다른 글

EntityManagerFactory와 EntityManager  (0) 2022.04.30
JPQL  (0) 2022.04.29
JPA - hibernate.dialect (트랜잭션)  (0) 2022.04.28
JPA - 엔티티 매니저  (0) 2022.04.27
JPA - hibernate.dialect (데이터베이스 방언)  (0) 2022.04.26