Hibernate는 객체 모델링(Object Oriented Modeling)과 관계형 데이터 모델링(Relational Data Modeling) 사이의 불일치를 해결해 주는 ORM(Object Relation Mapping) 도구입니다.
잘 사용하면 쿼리(sql) 하나 안쓰고 클래스의 set, get 같은것으로만 DB를 조종(?)할 수 있습니다.
하이버네이트를 이용하여 아주 간단한 CRUD1 만 해봅시다!
Java 1.6.0_13
Hibernate 3.3.2.GA
Apache Tomcat 6.0.18
HSQLDB 1.9.0 rc4
Eclipse 3.5 + Habernate Tools
- 하이버네이트 라이브러리와 log4j 사용을 위한 properties 파일을 세팅합니다.(아래 war 파일에서 확인해주세요)
- 하이버네이트 실행에 관련된 속성 정보를 가지고 있는 hibernate.cfg.xml 파일을 만듭니다.
- hibernate.cfg.xml 파일을 저장할 위치를 설정합니다. (기본 src)
- Database 정보를 입력합니다.
- hibernate.cfg.xml 파일을 열어서 몇가지를 더 추가해줍니다.
<?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="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="hibernate.connection.url">jdbc:hsqldb:hsql/antop</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- For a HSQL 1.8 in-memory database, this is required -->
<property name="connection.shutdown">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Mapping -->
</session-factory>
</hibernate-configuration>
<!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="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="hibernate.connection.url">jdbc:hsqldb:hsql/antop</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- For a HSQL 1.8 in-memory database, this is required -->
<property name="connection.shutdown">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Mapping -->
</session-factory>
</hibernate-configuration>
show_sql 프로퍼티를 true로 하면 콘솔에서 쿼리를 확인할 수 있습니다.
hbm2ddl.auto 프로퍼티는 hbm.xml 이 바뀌면 디비 테이블을 드랍시키고 다시 생성하니 주의하세요!
- 간단한 고객테이블(customer)를 매핑시켜보겠습니다. (각 컬럼의 속성은 다를겁니다... MySQL 툴로 디자인한거라...)
- Customer 클래스를 작성합니다.
package com.tistory.antop;
public class Customer {
private int seq;
private String id;
private String password;
private String name;
public Customer() { }
public int getSeq() {
return seq;
}
// 자동으로 생성되는 번호이므로 set 금지
private void setSeq(int seq) {
this.seq = seq;
}
// getter, setter, toString()
}
public class Customer {
private int seq;
private String id;
private String password;
private String name;
public Customer() { }
public int getSeq() {
return seq;
}
// 자동으로 생성되는 번호이므로 set 금지
private void setSeq(int seq) {
this.seq = seq;
}
// getter, setter, toString()
}
customer 테이블의 seq 칼럼은 자동증가이므로 클래스에서 setter를 private으로 선언한 것을 볼 수 있습니다. +_+/
- Customer 클래스에 대해 Mapping XML 파일을 작성합니다.
해당 클래스파일(.java)에서 마우스 오른쪽버튼 클릭 → New → Other...
이렇게 파일을 만들면 쵸큼 더 쉽게 작성할 수 있습니다.
Customer.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 package="com.tistory.antop">
<class name="Customer" table="customer">
<!-- 기본키가 되는 필드 -->
<id name="seq" column="SEQ">
<!-- 자동 증가 -->
<generator class="increment" />
</id>
<property name="id" column="ID" />
<property name="password" column="PWD" />
<property name="name" column="NAME" />
</class>
</hibernate-mapping>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.tistory.antop">
<class name="Customer" table="customer">
<!-- 기본키가 되는 필드 -->
<id name="seq" column="SEQ">
<!-- 자동 증가 -->
<generator class="increment" />
</id>
<property name="id" column="ID" />
<property name="password" column="PWD" />
<property name="name" column="NAME" />
</class>
</hibernate-mapping>
각 태그에 대한 성명은 여기를 봐주세요.
- 마지막으로 hibernate.cfg.xml 에다가 Customer.hbm.xml을 추가해줘야합니다.
...
<hibernate-configuration>
...
<!-- Mapping -->
<mapping resource="com/tistory/antop/Customer.hbm.xml"/>
</session-factory>
</hibernate-configuration>
<hibernate-configuration>
...
<!-- Mapping -->
<mapping resource="com/tistory/antop/Customer.hbm.xml"/>
</session-factory>
</hibernate-configuration>
- 간단하게 customer에 관한 예제를 만들어보았습니다. 배보다 배꼽이 더 크군염 ㅠ_ㅠ
테스트는 용자만 할 수 있습니다.! +_+/
참조 사이트
http://docs.jboss.org/hibernate/stable/core/reference/en/html/
http://dev.anyframejava.org/anyframe/doc/core/3.1.0/corefw/guide/hibernate-introduction.html
http://javacan.tistory.com/entry/101
'java IDE > hibernate' 카테고리의 다른 글
[hibernate] 하이버네이트 기본 준비 (0) | 2013.04.16 |
---|---|
[hibernate] 하이버네이트에 대한 토비님의 글 (0) | 2013.04.16 |