HelloWorld
Hibernate 3.2 설치후 샘플 프로그램 테스트
Hibernate 3.2 를 다운로드하고 Eclipse에 라이브러리를 등록해주었다면, 간단한 예제를 실행하여 설치상태를 확인해 본다. Eclipse에 Hibernate3.2를 설정하는 예는 http://micropilot.tistory.com/category/Hibernate/Setting-Up 를 참고한다.
위의 그림과 같이 테스트를 위한 파일은 총 4개로 구성했다. 사용하려는 예제는 hibernate.org에서 제공되는 설명서에서 소스를 구하고 약간만 수정한 상태이다.
구성파일 소개
Event.java : 데이터베이스 테이블과 맵핑될 자바 클래스
EventManager.java : Hibernate를 사용하여 데이터베이스 테이블과 Event객체를 맵핑하여 테이블에 레코드를 저장하고 가져오는 예를 보여주는 클래스(main메소드 포함)
Event.hbm.xml : Event클래스의 속성과 Events 테이블의 컬럼을 매핑하는 정보저장
hibernate.cfg.xml : 데이터베이스 연결정보 저장(dburl, jdbc driver, id, password, connection pool 등)
참고: xml 파일은 class path의 루트에 위치하도록 되어 있으므로 src 안에 둔다.
구성파일 소스
Event.java
package events;
import java.util.Date;
public class Event {
private Long id;
private String title;
private Date date;
public Event() {}
public Long getId() {
return id;
}
private void setId(Long id) {
this.id = id;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
Event.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="events.Event" table="EVENTS">
<id name="id" column="EVENT_ID">
<generator class="sequence"/>
</id>
<property name="date" type="timestamp" column="EVENT_DATE"/>
<property name="title"/>
</class>
</hibernate-mapping>
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:ORCL</property>
<property name="hibernate.connection.username">scott</property>
<property name="hibernate.connection.password">tiger</property>
<property name="hibernate.connection.pool_size">2</property>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.OracleDialect </property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- Mapping files -->
<mapping resource="Event.hbm.xml"/>
</session-factory>
</hibernate-configuration>
EventManager.java
package events;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import java.util.*;
public class EventManager {
public static void main(String[] args) {
EventManager mgr = new EventManager();
if (args[0].equals("store")) {
mgr.createAndStoreEvent("My Event", new Date());
}
else if (args[0].equals("list")) {
List events = mgr.listEvents();
for (int i = 0; i < events.size(); i++) {
Event theEvent = (Event) events.get(i);
System.out.println("Event: " + theEvent.getTitle() +
" Time: " + theEvent.getDate());
}
}
}
private void createAndStoreEvent(String title, Date theDate) {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session =sessionFactory.openSession();
org.hibernate.Transaction tx = session.beginTransaction();
Event theEvent = new Event();
theEvent.setTitle(title);
theEvent.setDate(theDate);
session.save(theEvent);
session.getTransaction().commit();
//tx.commit(); // 이것도 가능함
session.flush();
session.close();
}
private List listEvents() {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session =sessionFactory.openSession();
session.beginTransaction();
List result = session.createQuery("from Event").list();
session.getTransaction().commit();
session.flush();
session.close();
return result;
}
}
Eclipse에서 실행
main 메소드에서 커맨드라인 아규먼트를 이용하고 있으므로 EventManager를 실행할 때는 커맨드라인 아규먼트를 전달해 주어야 한다.
Oracle SQL Plus에서 확인한다.
SQL> select * from events;
EVENT_ID EVENT_DA TITLE
---------- ----------- ---------------
1 08/08/05 My Event
SQL>
데이터베이스에서 가져오는 기능 테스트
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: select event0_.EVENT_ID as EVENT1_0_, event0_.EVENT_DATE as EVENT2_0_, event0_.title as title0_ from EVENTS event0_
Event: My Event Time: 2008-08-05 12:48:24.0