이 글은 혼자 정리하기 위한 글입니다. 참조만 해주세요.
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();
댓글 없음:
댓글 쓰기