ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JPA & SAMPLE PROJECT
    JPA 2017. 5. 29. 22:11



    JPA 공부할겸 기본동작 구조 샘플링 코드에 대해서 공유합니다. GIT가시면 받을수있어요.

    SAMPLE PROJECT URL = https://github.com/chr3125/jpa_test



    JPA 서술 동영상 URL = http://serviceapi.rmcnmv.naver.com/flash/outKeyPlayer.nhn?vid=D27B798D516DFB5674A7F9BF709FB4025E42&outKey=V12487e3810f7f167f7ef0da87f37d557eeab09173e9a6baeb6690da87f37d557eeab&controlBarMovable=true&jsCallable=true&skinName=tvcast_white

    JPA(JAVA™ PERSISTENCE API)

    • Java EE(Java Enterprise Edition) 및 Java SE(Java Standard Edition) 환경 내에서 지속성 및 오브젝트/관계 맵핑 관리를 정의한다.
    • 여러 ORM 전문가가 참여한 EJB 3.0 스펙 작업에서 기존 EJB ORM 이던 Entity Bean 을 JPA 라고 변경했다.

       

    ORM(OBJECT RELATIONAL MAPPING)

    • 객체와 RDB 사이에 매핑을 정의한 메타데이터를 이용하여 자바 Application 내의 객체를 RDB 의 테이블로 자동으로(그리고 투명하게) 영속화 하는 것이다.
    • 영속화(persistence)
      • 애플리케이션의 데이터가 애플리케이션의 프로세스보다 더 오래 지속하게끔 하려는 것을 말한다.
      • Java 용어로 말하면, 객체의 상태가 JVM 의 범위를 넘어서서 지속하여 추후에 동일한 상태를 이용하려는 것이다.
      • http://hibernate.org/orm/what-is-an-orm/

     

    JPA의 장단점

    • 장점
      • 객체지향적으로 데이터를 관리할 수 있기 때문에 비즈니스 로직에 집중 할 수 있으며, 객체지향 개발이 가능하다.
      • 테이블 생성, 변경, 관리가 쉽다. (JPA 를 잘 이해하고 있는 경우)
      • 로직을 쿼리에 집중하기 보다는 객체자체에 집중 할 수 있다.
      • 빠른 개발이 가능하다.
    • 단점
      • 어렵다. 장점을 더 극대화 하기 위해서 알아야 할게 많다.
      • 잘 이해하고 사용하지 않으면 데이터 손실이 있을 수 있다. (persistence context)
      • 성능상 문제가 있을 수 있다. (쿼리가 동시에 날라간다.)

     

    JPA 의 구현체

     

    ENTITY

    • ORM 서비스를 구성하는 가장 기초적인 클래스이다.
    • Application 에서 다루고자 하는 Table 에 대응하여 구성할 수 있다.
    • Table 이 포함하는 Column 에 대응한 속성들을 가지고 있다.
    • 필요 요건
      • Entity annotation
      • Argument 없는 생성자
      • 최상위 레벨 클래스로 생성되어야 하고, enum / interface로 정의될 수 없음
      • final 클래스로 선언될 수 없음
      • Primary Key
      • Serializable 인터페이스 구현
      • 속성 정보 접근을 위한 getter / setter 구현
    • 주요 Annotations
      • @Entity
        • 해당 클래스가 Entity 클래스임을 표시하는 것으로 클래스 선언문 위에 기재한다.
        • 테이블명과 Entity 명이 다를 때에는 name 에 해당 테이블명을 기재한다.
      • @Id
        • 해당 Attribute 가 Key 임을 표시하는 것으로 Attribute 위에 기재한다.
      • @Column
        • 해당 Attribute 와 매핑되는 컬럼정보를 입력하기 위한 것으로 Attribute 위에 기재한다.
        • 컬럼명과 Attribute 명이 일치할 경우에는 기재하지 않아도 된다.
      • @OneToOne / @OneToMany / @ManyToOne / @ManyToMany
        • 테이블간 관계를 구성하기 위한 것으로 정의되는 Attribute 위에 기재한다.
        • 각각 1:1 / 1:N / N:1 / N:N d의 관계를 표현한다.
      • @Transient
        • 테이블의 컬럼과 매핑되지 않고 쓰이는 Attribute 를 정의하고자 할 때 Attribute 위에 기재한다.

     

    OPERATION

    • EntityManager
      • Entity 의 Lifecycle 과 persistence context, transaction 을 관리한다.
      • insert(persist)
      • update(merge)
        • EntityManager 의 merge() 메소드를 호출하여 DB 에 단건의 데이터를 수정할 수 있다.
        • 특정 객체가 Persistent 상태이고, 동일한 트랜잭션 내에서 해당 객체의 속성 값에 변경이 발생한 경우 merge() 메소드를 직접적으로 호출하지 않아도 트랜잭션 종료 시점에 변경 여부가 체크되어 변경 사항이 DB 에 반영된다.
      • delete(remove)
      • select(find)
    • EntityManagerFactory
      • EntityManager 를 생성하기 위한 클래스이다.
      • persistence.xml 설정에 기반한다.

     


    댓글

Designed by black7375.