Created with Raphaël 2.1.0
    Loading...

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents
maxLevel2

 

 

개요 

...

본 문서는 Hibernate, Hibernate+Spring 환경에서 Altibase와 연동하는 방법에 관해 기술한다.

...

Note

이 문서는 정보 제공을 목적으로 제공되며, 사전에 예고 없이 변경될 수 있습니다. 이 문서는 오류가 있을 수 있으며, 상업적 또는 특정 목적에 부합하는 명시적, 묵시적인 책임이 일절 없습니다.

이 문서에 포함된 Altibase 제품의 특징이나 기능의 개발, 발표 등의 시기는 Altibase 재량입니다.

Altibase는 이 문서에 대하여 관련된 특허권, 상표권, 저작권 또는 기타 지적 재산권을 보유할 수 있습니다.

 

 

Hibernate 개요

...

본 장에서는 Hibernate의 개념과 특징, 다운로드 및 사용 방법에 대해 간단히 살펴보도록 한다.

 

Hibernate란?

...

Hibernate란 프로그래머가 DBMS를 보다 편리하게 사용할 수 있게 해주는 ORM(Object Relational Mapping) 프레임워크로서 DBMS 테이블과 Java 객체와의 관계를 매핑시켜 persistence logic 처리를 도와주는 역할을 한다. 즉, Hibernate를 이용하면 DBMS의 테이블과 Java Persistence Object(JavaBean)를 매핑시켜 DBMS 에 CRUD(삽입, 조회, 수정, 삭제) 를 위한 DML을 쉽게 수행 할 수 있다.

...

http://www.hibernate.org

 

Hibernate 다운로드

...

Hibernate를 사용하기 위해서 Hibernate 관련 jar 파일이 필요하다. 이 jar 파일은 http://hibernate.org/orm/releases/5.4/ 사이트에서 다운로드 받을 수 있다. 다운로드 한 파일을 압축 해제하면 여러 디렉토리가 있으며, 특히 lib 디렉토리의 하위 디렉토리 내에 여러 가지 jar 파일들이 존재하는데 이 파일들을 이용하여 Hibernate와 연동한다.

본 문서에서는 Hibernate 5.4.8 버전을 사용하였으며 이 버전의 압축을 푼 디렉토리의 이름은 'hibernate-release-5.4.8.Final'이다.

 

 

Hibernate를 이용한 sample 작성

...

Hibernate를 이용하여 DBMS와 연동하기 위해서는 hibernate-configuration XML 파일과 hibernate-mapping XML 파일을 작성해야 한다.

...

Sample 프로그램을 작성하는 자세한 방법은 부록을 참고한다.

 

hibernate-mapping 파일 작성 

...

hibernate-mapping XML 파일은 DBMS 테이블과 Java Object 사이의 매핑 정보를 담고 있는 설정 파일이다.

...


각각의 태그에 대한 보다 자세한 설명은 http://www.hibernate.org 사이트를 참고한다.

 

hibernate-configuration 파일 작성

...

hibernate-configure 파일은 DBMS 연결을 위한 여러 가지 접속 정보와 고유 기능을 사용하기 위한 dialect 클래스 및 hibernate-mapping 파일들을 설정하는 파일이다.

...

각각의 태그에 대한 보다 자세한 설명은 http://www.hibernate.org 사이트를 참고한다.

 

응용 프로그램 작성

...

응용 프로그램에서 Session 객체를 이용하면 매핑 된 객체와 연동하여 DBMS 테이블에 DML을 수행할 수 있으며 방법은 다음과 같다.

...

각각의 태그에 대한 보다 자세한 설명은 http://www.hibernate.org 사이트를 참고한다.

 

 

Hibernate와 Altibase 연동

...

Hibernate에서 Altibase를 연동하기 위해서는 Altibase JDBC 드라이버를 설정하고 hibernate-configuration 파일에 Altibase를 위한 dialect 클래스를 지정해야 한다.

본 장에서는 Altibase에 특정되는 AltibaseDialect 클래스를 Hibernate jar 파일에 포함시키는 방법과 Altibase JDBC 드라이버를 얻는 방법, JDBC 드라이버를 설정하는 방법, hibernate-configuration 파일에 dialect를 설정하는 방법에 대해 설명한다. 또한, FailOver 기능을 사용하는 방법, 여러 버전의 Altibase를 연동하는 방법에 대해서도 살펴본다.

 

AltibaseDialect 클래스를 Hibernate jar 파일에 추가

...

DBMS 벤더는 제품의 특성에 맞는 비 표준 SQL을 제공할 수 있다.

...

  1. Hibernate jar 파일의 압축을 푼다.

    Code Block
    titleHibernate jar 압축 풀기
    themeDJango
    languagebash
    $mv hibernate-core-x.x.x.Final.jar to-the-java-file-directory
    $cd to-the-java-file-directory
    $jar xvf hibernate-core-x.x.x.Final.jar
  2. 배포되는 AltibaseDialect.java, AltibaseLimitHandler.java, SequenceInformationExtractorAltibaseDatabaseImpl.java 파일을 Hibernate jar 압축 푼 디렉토리에 위치하고, 컴파일 한다.

    Code Block
    titleAltibaseDialect 컴파일
    themeDJango
    languagebash
    $mv Altibase*.java to-the-java-file-directory
    $cd to-the-java-file-directory
    $javac -d . -cp . AltibaseLimitHandler.java
    $javac -d . -cp . AltibaseDialect.java
    $javac -d . -cp . SequenceInformationExtractorAltibaseDatabaseImpl.java
  3. AltibaseDialect 클래스가 포함된 Hibernate jar를 생성한다.

    Code Block
    titleAltibaseDialect 포함하는 Hibernate jar
    themeDJango
    languagebash
    $jar -cvfm hibernate-core-x.x.x.Final.jar  META-INF/MANIFEST.MF .
  4. 위에서 생성 된 hibernate-core-x.x.x.Final.jar  파일을 Hibernate jar 파일로 사용한다.

Altibase JDBC 드라이버를 구하는 방법

...

Altibase에서 제공하는 JDBC 드라이버는 Altibase.jar 파일이다. 이 파일은 Altibase가 설치되어있는 서버의 $ALTIBASE_HOME/lib 디렉토리에 위치한다.

...

  • Altibase의 통신 프로토콜 버전 확인 방법

    Code Block
    titleAltibase의 통신 프로토콜 버전 확인 방법
    themeDJango
    languagebash
    $ altibase -v
    version 5.3.3.13 XEON_LINUX_redhat_Enterprise_AS4-64bit-5.3.3.13-release-GCC3.4.6 (xeonredhat-linux-gnu) Jan 13 2010 14:35:30, binary db version 5.4.1, meta version 5.6.1, cm protocol version 5.6.1, replication protocol version 5.4.1

JDBC 드라이버를 설정하는 방법

...

Altibase JDBC 드라이버, Altibase.jar 파일을 classpath에 추가하거나 웹 서버의 적절한 디렉토리에 위치시킨다.

...

프로젝트 – JRE System Library [J2SE-1.5] - Properties – Installed JREs – 항목 중 jre를 클릭 – Edit – Add External JARs 를 클릭하여 Altibase.jar를 추가한다.

 

hibernate-configuration 파일에 dialect를 설정하여 Altibase와 연동 
Anchor
hibernate-configuration 파일에 dialect를 설정하여 Altibase와 연동
hibernate-configuration 파일에 dialect를 설정하여 Altibase와 연동

...

hibernate-configuration 파일의 <sessionFactory> 의 <property>태그를 이용하여 Altibase 연동을 위한 접속 정보와 dialect 클래스를 지정한다.

...

위의 AltibaseConnection 프로젝트를 실행하기 Hibernate 관련 jar 파일들과 Altibase.jar 파일이 필요하다.

 

FailOver를 이용한 Connection

...

Altibase v5.3.3 부터 FailOver를 지원하는데, FailOver 기능을 사용하기 위해서는 hibernate-configuration 파일의 connection.url 프로퍼티에 FailOver 관련 속성을 설정하면 된다.

...

위의 FailoverSample 프로젝트를 실행하기 위해서는 'hibernate-configuration 파일에 dialect를 설정하여 Altibase와 연동' 부분과 동일한 jar 파일들이 필요하다.

 

Altibase 2개의 버전을 동시에 접속

...

Altibase v5 부터는 하나의 어플리케이션에서 2개 이상의 버전을 동시에 연결할 수 있도록 Altibase v5 전용의 JDBC 드라이버를 제공한다. 이 드라이버를 이용하면 Altibase v5 – Altibase v7, Altibase v5 – Altibase v6 간 두 버전의 Altibase에 접속이 가능하다.

...


다음은 Altibase.jar와 Altibase5.jar 파일을 이용하여 두 버전의 Altibase의 드라이버를 로딩하는 예제이다.

 

예) MultiVersionConnection의 Hibernate.Altibase5.cfg.xml 파일
Code Block
titleAltibase v5 버전에 대한 설정
themeDJango
languagexml
…
<property name="connection.driver_class">Altibase5.jdbc.driver.AltibaseDriver
</property>
…

 

예) MultiVersionConnection의 Hibernate.Altibase7.cfg.xml 파일
Code Block
titleAltibase v5 이외 버전에 대한 설정
themeDJango
languagexml
…
<property name="connection.driver_class">Altibase.jdbc.driver.AltibaseDriver
</property>
…

예) MultiVersionConnection의 PersonApp.java파일
Code Block
titlePersonApp.java
themeDJango
languagejava
…
SessionFactory sessionFactory1 =
    new Configuration().configure("Hibernate.Altibase5.cfg.xml").buildSessionFactory();
SessionFactory sessionFactory2 =
    new Configuration().configure("Hibernate.Altibase7.cfg.xml").buildSessionFactory();
     
Session session1 = sessionFactory1.openSession();
Session session2 = sessionFactory2.openSession();
…

...

반드시 Altibase v5 전용의 드라이버를 먼저 로딩해야 한다는 것에 유의해야 한다.

 

Hibernate, Spring, Altibase 연동

...

Altibase와 연동하기 위해서 Hibernate의 설정에 접속 정보와 dialect를 지정해서 연결 할 수도 있고, Spring에 dataSource를 지정해서 연결할 수도 있다.

본 장에서는 이 두 방법을 이용하여 Altibase와 연동하는 방법에 대해 설명한다.

 

Spring에 dataSource를 설정하는 경우 
Anchor
Spring에 dataSource를 설정하는 경우
Spring에 dataSource를 설정하는 경우

...

Hibernate와 Spring을 함께 사용하기 위해서는 다음의 과정이 필요하다.

...

Code Block
titleSpringAltibaseConnection1 의 applicationContext.xml 파일
themeDJango
languagexml
…
<!-- Altibase 접속을 위한 dataSource 를 설정한다. -->
<bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="Altibase.jdbc.driver.AltibaseDriver"/>
    <property name="url" value="jdbc:Altibase://192.168.1.35:20300/mydb"/>
    <property name="username" value="sys"/>
    <property name="password" value="manager" />
</bean>
 
<!-- Hibernate의 sessionFactory bean을 지정한다. -->
<bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>          <!-- 위에서 설정한 dataSource를 입력한다. -->
    <property name="mappingResources">
        <list>
                <!-- hibernate-mapping 파일들을 지정-->
                <value>Person.hbm.xml</value>
        </list>
    </property>
 
    <!-- Hibernate에 관한 여러 가지 속성들을 정의한다. -->
    <property name="hibernateProperties">
        <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.AltibaseDialect</prop>
        </props>
    </property>
</bean>
 
<bean id="personDao" class="examples.domain.PersonDao" >
    <constructor-arg ref="sessionFactory" />
</bean>
…

 

Spring 연동 시 필요한 jar 파일 

위의 예제 SpringAltibaseConnection1 프로젝트를 실행하기 위해서는 'hibernate-configuration 파일에 dialect를 설정하여 Altibase와 연동' 부분에서 필요했던 jar파일들뿐만 아니라 spring 관련된 jar 파일이 더 필요하다.

jar 파일의 자세한 디렉토리 위치는 『Altibase Spring 연동가이드』문서를 참고한다.

 

Hibernate 속성에 접속 정보를 설정하는 경우

...

Hibernate+Spring 환경에서 Hibernate에 접속 속성을 지정하여 연결할 경우에는 다음의 과정이 필요하다.

...

Code Block
titleSpringAltibaseConnection2의 applicationContext.xml 파일
themeDJango
languagexml
...
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="mappingResources">
        <list>
            <value>Person.hbm.xml</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">
                            org.hibernate.dialect.AltibaseDialect</prop>
            <prop key="hibernate.connection.driver_class">
                            Altibase.jdbc.driver.AltibaseDriver</prop>
            <prop key="hibernate.connection.url">
                            jdbc:Altibase://192.168.1.35:21129/mydb</prop>
            <prop key="hibernate.connection.username">sys</prop>
            <prop key="hibernate.connection.password">manager</prop>
            <prop key="hibernate.connection.pool_size">1</prop>
            <prop key="hibernate.current_session_context_class">thread</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>
</bean>
     
<bean id="personDao" class="examples.domain.PersonDao" >
    <constructor-arg ref="sessionFactory" />
</bean>
... 

필요한 jar 파일

SpringAltibaseConnection2 예제를 실행하기 위해서는 'Spring에 dataSource를 설정하는 경우' 부분과 같은 jar 파일들이 필요하다.

 

Altibase의 ConnectionPool을 이용

...

Altibase에서 제공하는 AltibaseConnectionPoolDataSource 클래스를 사용하면 Altibase의 ConnectionPool을 이용할 수 있다.

...

Code Block
titleAltibaseConnectionPool의 applicationContext.xml 파일
themeDJango
languagexml
…
<bean id="dataSource"
        <!-- Altibase에서 제공하는 ABConnectionPoolDataSource 클래스를 사용 -->
        class="Altibase.jdbc.driver.ABConnectionPoolDataSource">
        <property name="url" value="jdbc:Altibase://192.168.1.35:21129/mydb"/>
        <property name="user" value="sys"/>
        <property name="password" value="manager" />
</bean>
…

필요한 jar 파일

AltibaseConnectionPool 예제를 실행하기 위해서는 'Spring에 dataSource를 설정하는 경우' 부분과 같은 jar 파일들이 필요하다.

 

Hibernate 연동 시 고려사항

...

Hibernate에서 Altibase 연동 시 고려해야 할 사항에 대해 설명한다.

 

Hibernate에서 트랜잭션 관리

...

Hibernate에서 트랜잭션을 처리할 때는 응용 프로그램에서 Session 클래스의 beginTransaction() 메소드를 호출한 후 Transaction 클래스의 commit() / rollback() 메소드를 호출하면 된다.

...

Code Block
titleAltibaseConnection의 PersonApp.java 파일
themeDJango
languagejava
…
<!-- 트랜잭션 시작을 알리기 위해 beginTransaction() 메소드를 호출 -->
Transaction tx = session.beginTransaction();
//insert Person
Person newPerson1 = new Person();
…
session.save(newPerson1);
<!-- 트랜잭션 종료를 알리기 위해 commit() 메소드 호출 -->
tx.commit();
…
//update Person
<!-- 트랜잭션 시작을 알리기 위해 beginTransaction() 메소드를 호출 -->
tx = session.beginTransaction();
newPerson1.setHeightInMeters(1.93);
newPerson1.setWeightInKilograms(86.36);
session.flush();
<!-- 트랜잭션 종료를 알리기 위해 commit() 메소드 호출 -->
tx.commit();
…
//delete Person
<!-- 트랜잭션 시작을 알리기 위해 beginTransaction() 메소드를 호출 -->
tx = session.beginTransaction();
session.delete(session.get(Person.class, newPerson1.getId()));
<!-- 트랜잭션 종료를 알리기 위해 commit() 메소드 호출 -->
tx.commit();
…

LOB 데이터 처리

...

Hibernate에서 LOB을 처리하기 위해서 hibernate-mapping 파일에 컬럼과 변수의 mapping을 정의한 <property> 태그에 CLOB일 경우에는 type=“org.hibernate.type.StringClobType”, sql-type=”clob”으로 정의해주고,

...

Code Block
titleLobSample의 LobApp.java파일
themeDJango
languagejava
…
    <!-- beginTransaction() 메소드를 호출하면 autocommit 모드를 false 가 된다.
         LOB을 처리 하기 전 반드시 beginTransaction() 메소드를 호출한다. -->
    Transaction tx = session.beginTransaction();
     
    StringBuffer msg=new StringBuffer("Existing Disk-based RDBMS (also known as
    Disk-Resident DBMSs or DRDBMSs" );
     
    for(int i=0; i<10;i++){
    msg.append(msg.toString());
    }
     
    Lobsample lob1 = new Lobsample(1,msg.toString(),msg.toString().getBytes());
    session.save(lob1);
    tx.commit();
    session.flush();
     
    tx = session.beginTransaction();
     
    Lobsample Lobsample1
        = (Lobsample) session.get(Lobsample.class,lob1.getLob_id());
     
    System.out.println(Lobsample1.getClobcolumn().substring(0, 100));
    System.out.println(Lobsample1.getBlobcolumn());
     
    tx.commit();
…

 

필요한 Jar 파일

위의 LobSample 프로젝트를 실행하기 위해서는 'hibernate-mapping 파일에 dialect를 설정하여 Altibase와 연동' 부분과 같은 jar 파일들이 필요하다.

 

Procedure/Function 호출

...

Hibernate에서 DBMS에 생성한 Stored Procedure/Function 호출은 지원하지 않기 때문에 Session 객체를 통해 Connection 객체를 얻어와서 일반 JDBC에서 호출하는 방법처럼 CallableStatement를 이용해야 한다.

다음은 Stored Procedure/Function을 호출하는 예제이다.

예) ProcedureSample의 Procedure/Function 생성 구문
Code Block
titleProcedureSample의 Procedure/Function 생성 구문
themeDJango
languagesql
CREATE OR REPLACE PROCEDURE sum_proc
(
        p_num1 IN NUMBER,
        p_num2 IN NUMBER,
        p_num3 OUT NUMBER
)
AS
BEGIN
        p_num3 := p_num1 + p_num2;
END;
/
 
CREATE OR REPLACE FUNCTION sum_func
(
        p_num1 IN NUMBER,
        p_num2 IN NUMBER
)
RETURN NUMBER
AS
        v_num NUMBER;
BEGIN
        v_num := p_num1 + p_num2;
        RETURN v_num;
END;
/

 

예) ProcedureSample의 ProcedureApp.java
Code Block
titleProcedureSample의 ProcedureApp.java
themeDJango
languagejava
…
    SessionFactory sessionFactory =
            new Configuration().configure().buildSessionFactory();
             
    Session session = sessionFactory.openSession();
    Connection con =session.connection();
     
    // Stored Procedure 호출
    String sql1 = "{call sum_proc(?,?,?)}";
    CallableStatement altibaseStatement1 = con.prepareCall(sql1);
    altibaseStatement1.setInt(1,10);
    altibaseStatement1.setInt(2,20);
    altibaseStatement1.registerOutParameter(3,java.sql.Types.NUMERIC);
    altibaseStatement1.execute();
    System.out.println(altibaseStatement1.getDouble(3));
     
     
    // Stored Function 호출
    String sql2 = "{call ? := sum_func(?,?)}";
    CallableStatement altibaseStatement2 = con.prepareCall(sql2);
    altibaseStatement2.registerOutParameter(1,java.sql.Types.NUMERIC);
    altibaseStatement2.setInt(2,10);
    altibaseStatement2.setInt(3,20);
    altibaseStatement2.execute();
    System.out.println(altibaseStatement2.getDouble(1));
…

...

ProcedureSample 예제를 실행하기 위해서는 'hibername-mapping 파일에 dialect를 설정하여 Altibase와 연동'과 같은 jar 파일들이 필요하다.

 

NativeSQL 실행

...

SQL문 중 MOVE 구문은 Altibase에서만 제공하는 문장이다. 이렇게 특정 DBMS가 제공하는 특화된 기능을 실행하는 방법은 다음과 같다.

  1. hibernate-mapping 파일에 nativeSQL 구문을 작성한다.
  2. 응용 프로그램에서 session 객체의 getNamedQuery() 메소드를 호출하여 Query 객체를 얻어온다.
  3. Query 객체의 각각의 SQL문을 실행하는 메소드를 호출한다. (ex. executeUpdate(), list() 등)

다음은 MOVE 문을 실행하는 예제이다.

예) NativeSQL의 NativeSQL.hbm.xml 파일
Code Block
titleNativeSQL의 NativeSQL.hbm.xml 파일
themeDJango
languagexml
<hibernate-mapping>
…
    <sql-query name="nativeSQLMove">
            <![CDATA[
                    MOVE INTO t2 (c1,c2,c3)
                    FROM t1(c1,c2,c3)
            ]]>
    </sql-query>
…
</hibernate-mapping>

 

예) NativeSQL의 NativeSQLApp.java
Code Block
titleNativeSQL의 NativeSQLApp.java
themeDJango
languagejava
…
SessionFactory sessionFactory
        = new Configuration().configure("Hibernate.cfg.xml").buildSessionFactory();
Session session = sessionFactory.openSession();
Query query = session.getNamedQuery("nativeSQLMove");
Transaction tx = session.beginTransaction();
int rows = query.executeUpdate();
tx.commit();
System.out.println(rows+" data moved");
…

 

필요한 Jar 파일

NativeSQL 예제를 실행하기 위해서는 'hibername-mapping 파일에 dialect를 설정하여 Altibase와 연동' 부분과 같은 jar 파일들이 필요하다.

 

부록

...

AltibaseConnection 예제를 바탕으로 Hibernate에서 Altibase와 연동하는 방법에 대해 좀 더 자세하게 설명한다.

예제에서 개발 도구는 Eclipse를 사용한다.

 

DBMS 테이블 및 시퀀스 생성

...

DBMS에 다음의 테이블과 시퀀스를 생성한다. 

Code Block
titlecreate_tbl.sql
themeDJango
languagesql
CREATE TABLE PERSON (
    ID          NUMBER (5, 0)   NOT NULL,
    NAME        VARCHAR (40)    NOT NULL,
    BIRTH_DATE  DATE,
    WEIGHT_KG   NUMBER (4, 2)   NOT NULL,
    HEIGHT_M    NUMBER (4, 2)   NOT NULL,
    IS_MARRIED  CHAR(1),
    PRIMARY KEY (ID)
);
CREATE SEQUENCE PERSON_SEQ;

프로젝트 생성

...

Eclipse에서 AltibaseConnection 이라는 프로젝트를 생성한다.

  1. 메뉴 – File – New - Java Project 클릭
  2. Project name : 에 AltibaseConnection 입력
  3. Finish 버튼을 클릭

hibernate-mapping 파일 작성

...

DBMS의 person 테이블과 Person 클래스 사이의 mapping 정보를 정의한 hibernate-mapping 파일을 작성한다.

  1. AltibaseConnection 프로젝트 – src 디렉토리에서 마우스 오른쪽 버튼 클릭하여 New – File을 클릭한다.
  2. File name: 에 Person.hbm.xml을 작성한다.

     

    다음의 내용을 Person.hbm.xml 파일에 작성한다.

     

    Code Block
    titlePerson.hbm.xml
    themeDJango
    languagexml
    <?xml version="1.0" encoding="euc-kr" ?>
    <!DOCTYPE hibernate-mapping PUBLIC
          "-//Hibernate/Hibernate Mapping DTD//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        <class name="examples.domain.Person" table="person">
            <id name="id" column="id" type="int">
                <generator class="sequence">
                    <param name="sequence_name">PERSON_SEQ</param>
                </generator>
            </id>       
            <!-- person 테이블의 컬럼과 Person class의 변수를 <property> 태그를 통해 각각 매핑한다. -->
            <property name="name" column="name" type="string"/>
            <property name="birthDate" column="birth_date" type="date"/>
            <property name="weightInKilograms" column="weight_kg" type="double"/>
            <property name="heightInMeters" column="height_m" type="double"/>
            <property name="isMarried" column="is_Married" type="boolean"/>
        </class>
    </hibernate-mapping>

     

    person 테이블의 컬럼과 Person 클래스의 변수를 <property> 태그를 통해 각각 매핑한다.
    Java의 boolean 타입은 DBMS에서 지원하는 타입이 아니므로 0(false), 1(true)의 값으로 저장하도록 컬럼을 CHAR(1)의 타입으로 생성하였다.

hibernate-configuration 파일 작성

...

Altibase에 접속하기 위한 dialect를 정의하는 hibernate-configuration 파일을 작성한다. 

...

Code Block
titleHibernate.cfg.xml
themeDJango
languagexml
<?xml version='1.0' encoding="euc-kr"?>
<!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="connection.driver_class">Altibase.jdbc.driver.AltibaseDriver</property>
        <property name="connection.url">jdbc:Altibase://192.168.1.35:20300/mydb</property>
        <property name="connection.username">sys</property>
        <property name="connection.password">manager</property>
        <property name="connection.pool_size">1</property>
        <property name="dialect">org.hibernate.dialect.AltibaseDialect</property>
        <property name="current_session_context_class">thread</property>
        <property name="show_sql">true</property>
        <mapping resource="Person.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

응용 프로그램 작성

...

  1. person 테이블에 대한 DO객체인 Person 클래스를 작성한다.

    1-1. AltibaseConnection 프로젝트의 src 디렉토리에서 마우스 오른쪽 버튼 클릭하여 New – Class를 클릭한다.
    1-2. Package: 에 examples.domain를 입력하고 Name: 에 Person를 입력한다.
     

    다음의 내용을 Person.java 파일에 작성한다.

    Code Block
    titlePerson.java
    themeDJango
    languagejava
    package examples.domain;
    import java.sql.*;
    public class Person {
        private int id;
        private String name;
        private Date birthDate;
        private double weightInKilograms;
        private double heightInMeters;
        private boolean isMarried;
         
        public int getId () {
            return id;
        }
        public void setId (int id) {
            this.id = id;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getName() {
            return name;
        }
        public void setBirthDate(Date birthDate) {
            this.birthDate = birthDate;
        }
        public Date getBirthDate() {
            return birthDate;
        }
        public void setWeightInKilograms(double weightInKilograms) {
            this.weightInKilograms = weightInKilograms;
        }
        public void setIsMarried(boolean isMarried) {
            this.isMarried = isMarried;
        }
        public double getWeightInKilograms() {
            return weightInKilograms;
        }
        public void setHeightInMeters(double heightInMeters) {
            this.heightInMeters = heightInMeters;
        }
        public double getHeightInMeters() {
            return heightInMeters;
        }
        public boolean getIsMarried() {
            return isMarried;
        }
        public String toString(){
            return "id="+id+", name="+name+", birthData="+birthDate+", weightInKillograms="
            +weightInKilograms+",heightInMeters="+heightInMeters+",isMarried="+isMarried;
             
        }
    }
  2. DBMS에 DML을 실행하는 main 프로그램을 작성한다.

    2-1. AltibaseConnection 프로젝트의 src 디렉토리에서 마우스 오른쪽 버튼 클릭하여 New – Class를 클릭한다.

    2-2. Name: 에 PersonApp를 입력한다.
     

    다음의 내용을 PersonApp.java 파일에 작성한다.

    Code Block
    titlePersonApp.java
    themeDJango
    languagejava
    import java.sql.SQLException;
    import java.util.*;
    import org.hibernate.SessionFactory;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.Criteria;
    import org.hibernate.criterion.Order;
    import examples.domain.Person;
    public class PersonApp {
        public static void main(String[] args) throws  SQLException {
            SessionFactory sessionFactory = new Configuration().configure("Hibernate.cfg.xml").buildSessionFactory();
            Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
             
            //insert Person
            System.out.println("insert Person");
            Person newPerson1 = new Person();
            newPerson1.setName("KIM");
            newPerson1.setBirthDate (new java.sql.Date(1978 - 1900, 2 - 1, 1));
            newPerson1.setHeightInMeters(1.82);
            newPerson1.setWeightInKilograms(80.23);
            newPerson1.setIsMarried(true);
            session.save(newPerson1);
             
            Person newPerson2 = new Person();
            newPerson2.setName("LEE");
            newPerson2.setBirthDate (new java.sql.Date(1975 - 1900, 5 - 1, 5));
            newPerson2.setHeightInMeters(1.57);
            newPerson2.setWeightInKilograms(45.23);
            newPerson2.setIsMarried(false);
            session.save(newPerson2);
            tx.commit();
             
            System.out.println();
            System.out.println("select all Persons");
            Criteria crit = session.createCriteria(Person.class);
            crit.addOrder(Order.asc("id"));
            List<Person> list = crit.list();
            System.out.println("Selected "+list.size()+" records.");
            for(int i=0; i< list.size();i++){
                System.out.println(list.get(i));
             
            }
            tx = session.beginTransaction();
             
            //update Person
            //Session 범위 내에서 변경된 객체 값은 자동으로 DBMS에 반영
            System.out.println();
            System.out.println("update Person");
            newPerson1.setHeightInMeters(1.93);
            newPerson1.setWeightInKilograms(86.36);
            System.out.println();
            session.update(newPerson1);
            tx.commit();
            Person person = (Person) session.get(Person.class,newPerson1.getId());
            System.out.println(person);
             
            //delete Person
            tx = session.beginTransaction();
            System.out.println();
            System.out.println("delete Person");
            session.delete(session.get(Person.class, newPerson1.getId()));
            //session.delete(session.get(Person.class, newPerson2.getId()));
            tx.commit();
            crit = session.createCriteria(Person.class);
            crit.addOrder(Order.asc("id"));
            list = crit.list();
            System.out.println("Selected "+list.size()+" records.");
            for(int i=0; i< list.size();i++){
                System.out.println(list.get(i));
             
            }
             
        }
    }

필요한 jar 파일 추가

...

Altibase.jar와 hibernate 관련 jar 파일을 추가한다.

AltibaseConnection 프로젝트에서 마우스 오른쪽 버튼 클릭하여 Properties를 클릭 – Java Build Path – Libraries 에서 Add External JARS를 클릭하여 필요한 jar 파일들을 추가한다.

 

응용 프로그램 실행

...

AltibaseConnection 프로젝트를 실행한다.

AltibaseConnection 프로젝트를 클릭한 후 메뉴에서 Run을 실행하거나 Run 실행 단추를 클릭한다.

참고자료

...

1. 『 ALTIBASE 개발가이드

2. 『 JAVA 개발 가이드 』

...