본문 바로가기
JPA Tutorial

[자바 ORM 표준 JPA 프로그래밍 4] Hello JPA - 애플리케이션 개발

by 미소5 2023. 9. 15.

  • 객체와 테이블을 생성하고 매핑

 

  • Member 테이블 생성
    • drop table member;
    • create table member ( id bigint not null, name varchar(255), primary key (id) );

 

  • Member 클래스 생성
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity //JPA를 사용하는, JPA가 관리할 객체
public class Member {

    @Id //데이터베이스 PK와 매핑
    private Long id;
    private String name;

    //Getter, Setter
    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;
    }
}
  • @Entity
    • JPA가 관리할 객체
  • @Id:
    • 데이터베이스 PK와 매핑

 


  • 회원 등록
public class JpaMain {

    public static void main(String[] args){

        EntityManagerFactory emf=Persistence.createEntityManagerFactory("hello");
        //persistence.xml에서 persistence-unit name 으로 지정한 이름 "hello"
        EntityManager em=emf.createEntityManager();

	/**JPA를 통한 모든 데이터 변경은 트랜잭션 안에서 실행해야 한다*/
        EntityTransaction tx=em.getTransaction();
        tx.begin();

        Member member=new Member();
        member.setId(1L);
        member.setName("helloA");

        em.persist(member);

        tx.commit();	//커밋해줘야 반영된다
	/***/
	
        em.close();
        emf.close();

    }
}

☆☆☆ JPA를 통한 모든 데이터 변경트랜잭션 안에서 실행해야 한다 ☆☆☆

  • JPA에서 데이터를 변경하는 모든 작업은 꼭 트랜잭션이라는 단위 안에서 작업되어야 한다.

 

회원등록 성공!

 


  • JPA 정석 코드 (주로 이렇게 쓴다)  →스프링이 이 코드들을 자동으로 만들어준다!
public class JpaMain {
    public static void main(String[] args){

        EntityManagerFactory emf=Persistence.createEntityManagerFactory("hello");
        //persistence.xml에서 persistence-unit name 으로 지정한 이름 "hello"
        EntityManager em=emf.createEntityManager();


        /**JPA를 통한 모든 데이터 변경은 트랜잭션 안에서 실행해야 한다*/
        EntityTransaction tx=em.getTransaction();
        tx.begin();

        try{
            Member member=new Member();
            member.setId(2L);
            member.setName("helloB");

            em.persist(member);

            tx.commit();
        }catch (Exception e){
            tx.rollback();
        }finally {
            em.close();     //사용끝난후, 꼭 닫아줘야함
        }
        /***/

        emf.close();

    }
}

 

 


  • 회원 단건 조회
try{
    Member findMember=em.find(Member.class, 1l);
    System.out.println("findMember.id= "+findMember.getId());
    System.out.println("findMember.name= "+findMember.getName());

    tx.commit();
}

회원조회 성공!

 


  • 회원 수정
try{
    Member findMember=em.find(Member.class, 1l);
    findMember.setName("helloJPA");

    tx.commit();
}

회원수정 성공!

 


  • 회원 삭제
try{
    Member findMember=em.find(Member.class, 1l);
    em.remove(findMember);

    tx.commit();
}

 


  • 엔티티 매니저 팩토리하나만 생성해서 애플리케이션 전체에서 공유
  • 엔티티 매니저쓰레드 간에 공유X , 사용하고 버려야( em.close(); ) 한다.
728x90
반응형