Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

공hannah부

자바 ORM 표준 JPA 프로그래밍 CH02 본문

공부/백엔드

자바 ORM 표준 JPA 프로그래밍 CH02

Hannah0226 2023. 5. 22. 03:00

메이븐과 사용 라이브러리 관리

메이븐

  • 메이븐은 간단히 말해 라이브러리르 관리해주는 도구이다.
  • pom.xml에 사용할 라이브러리를 적어주면 라이브러리를 자동으로 내려받아 관리해준다.

pom.xml

  • <dependencies>에 사용할 라이브러리를 지정해 groupId + artifactId + version만 적어주면 라이브러리를 메이븐 공식 저장소에서 내려받아 추가해준다. 
  • 핵심 라이브러리: JPA, 하이버네이트, H2 데이터베이스

객체 매핑 시작

회원 테이블 만들기

CREATE TABLE MEMBER(
    ID VARCHAR(255) NOT NULL,
    NAME VARCHAR(255),
    AGE INTEGER,
    PRIMARY KEY(ID)
)

 

회원 클래스 만들기 + 어노테이션 추가

package jpabook.start;

import javax.persistence.*;  //**

@Entity
@Table(name="MEMBER")
public class Member {

    @Id
    @Column(name = "ID")
    private String id;

    @Column(name = "NAME")
    private String username;

    private Integer age;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

 

어노테이션

  • @Entity: 해당 클래스를 테이블과 매핑한다고 JPA에게 알려줌. 
  • @Table: 엔티티 클래스에 매핑할 테이블 정보를 알려줌. 이 어노테이션을 생략하면 클래스 이름을 테이블 이름으로 매핑
  • @Id: 엔티티 클래스의 필드를 테이블의 기본 키에 매핑. 이렇게 @Id가 사용된 필드를 식별자 필드라고 함.
  • @Column: 필드를 컬럼에 매핑. 
  • 매핑 정보가 없는 필드: age필드와 같이 매핑 어노테이션을 생략하면 필드명을 사용해 컬럼명으로 매핑. (대소문자 구분X 가정)

 


애플리케이션 개발

엔티티 매니저 설정

  • 엔티티 매니저 팩토리 생성
    • EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook");
    • persistence.xml의 설정 정보를 사용해 엔티티 매니저 팩도리를 생성해야한다. 이 엔티티 매니저 팩토리는 애플리케이션 전체에서 딱 한번만 생성해야한다.
  • 엔티티 매니저 생성
    • EntityManager em = emf.createEntityManager();
    • 엔티티 매니저 팩토리에서 엔티티 매니저를 생성한다. 이를 사용해 엔티티를 데이터베이스에 등록/수정/삭제/조회 할 수 있다.
  •  종료
    • em.close();
    • emf.close(); 
    • 사용이 끝난 엔티티 매니저와 팩토리는 반드시 종료해야한다. 

 

트랜잭션 관리

  • JPA를 사용하면 항상 트랜잭션 안에서 데이터를 변경해야한다.
  • 트랜잭션을 시작하려면 엔티티 매니저에서 트랜잭션 API를 받아와야한다.
  • 트랜잭션 API를 사용해 비즈니스 로직이 정상 동작하면 트랜잭션을 커밋하고, 예외가 발생하면 롤백한다.

비즈니스 로직

  • 회원 엔티티를 하나 생성한 후 엔티티 매니저를 통해 데이터베이스에 등록, 수정, 삭제, 조회한다.
  • 등록
    • em.persist(member);
    • 엔티티 매니저의 persist() 메소드에 저장할 엔티티를 넘겨준다.
  • 수정
    • member.setAge(20);
    • JPA는 어떤 엔티티가 변경되었는지 추적하는 기능을 갖추고 있기에 위처럼 엔티티의 값만 변경하면 된다.
  • 삭제
    • em.remove(member);
    • 엔티티 매니저의 remove() 메소드에 삭제하려는 엔티티를 넘겨준다.
  • 한 건 조회
    • Member findMember = em.find(Member.class, id);
    • find() 메소드는 조회할 엔티티 타입과 @Id로 데이터베이스 테이블의 기본 키와 매핑한 식별자 값으로 엔티티 하나를 조회하는 메소드다.
package jpabook.start;

import javax.persistence.*;
import java.util.List;

public class JpaMain {

    public static void main(String[] args) {

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); //엔티티 매니저 팩토리 생성
        EntityManager em = emf.createEntityManager(); //엔티티 매니저 생성

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

        try {
            tx.begin(); //트랜잭션 시작
            logic(em);  //비즈니스 로직
            tx.commit();//트랜잭션 커밋

        } catch (Exception e) {
            e.printStackTrace();
            tx.rollback(); //트랜잭션 롤백
        } finally {
            em.close(); //엔티티 매니저 종료
        }

        emf.close(); //엔티티 매니저 팩토리 종료
    }

    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() + ", 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(member);

    }
}

 

 

자바 ORM 표준 JPA 프로그래밍 : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com