포스트 목록

2016년 9월 8일 목요일

Hibernate 정리 - 2 (Annotation)

이 글은 혼자 정리하기 위한 글입니다. 참조만 해주세요.

1. 하이버네이트 Annotation?

annotation 을 사용하여 하이버네이트 application 을 구성할 수 있다.

하이버네이트 annotation 은 JPA 2의 설계서와 이를 위한 서포트를 근간으로 삼고 있다.

모든 JPA annotaion 을 javax.persistence.* 에 정의되어 있다.

하이버네이트의 EntityManager 는 JPA 설계서에 정의된 생명 주기와 인터페이스를 구현한다.

하이버네이트 annotation 을 사용하면, mapping 파일(hbm) 을 생성하지 않아도 된다.


2. annotation 사용해보기

다음 4 단계를 걸쳐서 annotation 을 사용한다.

 1) jar 파일 추가
 2) Persistent Class 생성
 3) 설정파일에 Persistent Class 매핑
 4) 사용

 1) jar 파일 추가
     다음 세개의 jar 파일을 각자 추가한다. (JDBC도 추가한다.)
       - hibernate-core
       - cglib
       - log4j
       - commons
       - SLF4J
       - dom4j
       - xalan
       - xerces
       - hibernate-commons-annotations.jar
       - ejb3-persistence.jar
       - hibernate-annotations.jar

 2) Persistent Class 생성
     Persistent Class 를 생성시 몇개의 규칙을 따라야 한다.
       - 기본 생성자가 있어야 한다. (최소 패키지 접근까지는 가능해야 한다.)
       - Class 의 식별 Field 를 만들어야 한다. (선택)
       - getter와 setter 를 만들어야 한다. (선택이라고는 하는데, 만드는게 좋을 것 같다.)
       - final 클래스가 아니어야 한다.

     위 규칙을 잘 봤으면 annotation 을 사용하여, Persistent Class 를 만들어 보자.

     @Entity :: 이 클래스가 Entity 라는 것을 알려준다.
     @Table :: 테이블의 이름을 명시한다. 만약 이 annotation 을 사용하지 않으면,
                  하이버네이트는 Class 의 이름을 테이블의 이름으로 사용한다.
     @Id :: Entity (또는 Class) 의 식별자
     @Column :: Field 의 칼럼에 대한 상세를 적는다. 만약 이 annotation 을 사용하지
                     않으면, 하이버네이트는 Field 의 이름을 칼럼의 이름으로 사용한다.

     ex)
         package sample;

         import javax.persistence.Entity;
         import javax.persistence.Table;
         import javax.persistence.Id;

         @Entity
         @Table(name="emp")
         public class Employee {

             @Id
             private int id;
             private String name;

             /* setter and getter ..... 생략  */
         }

 3) 설정파일에 Persistent Class 매핑
     이제는 설정파일을 만들고, (2)에서 정의한 클래스를 mapping 할 차례이다.
     이름은 hibernate.cfg.xml 로 하며, 일반적인 양식은 다음과 같다.
     (저장은 일단 root class path 로...)

     <?xml version='1.0' encoding='UTF-8'?>
     <!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

     <hibernate-configuration>
       <session-factory>
         <property name="hbm2ddl.auto">create</property>
         <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
         <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
         <property name="connection.username">system</property>
         <property name="connection.password">oracle</property>
         <property name="connection.driver_class">
             oracle.jdbc.driver.OracleDriver</property>
   
         <mapping class="sample.Employee"/>
       </session-factory>
     </hibernate-configuration>

    위에서 <mapping class="sample.Employee"/> 부분이 (2)에서 정의한 클래스를               mapping 하는 부분이다.

  4) 사용
      사용하는 방법에 대해서는 간략한 코드로 표현한다.

      SessionFactory sessionFactory = null;
      String configFilePath = "hibernate.cfg.xml";

      Configuration cfg = new Configuration().configure(configFilePath);

      StandardServiceRegistryBuilder sb = new StandardServiceRegistryBuilder();
      sb.applySettings(cfg.getProperties());
     
      StandardServiceRegistry standardServiceRegistry = sb.build();
      sessionFactory = cfg.buildSessionFactory(standardServiceRegistry);

      Session session = sessionFactory.getCurrentSession();
      session.beginTransaction();

      /* INSERT 수행 */
      Employee emp = new Employee();
      emp.setId(10);
      emp.setName("주은성");
      session.save(emp);

      session.getTransaction().commit();
      session.close();
   

댓글 없음:

댓글 쓰기