Hibernate の開発手順

2008/11/09 23:52Update
TAGS: Hibernate | 開発手順

Hibernate の開発手順について学びます。

Hibernate のインストール方法について、次の記事をご参照ください。
Hibernate のインストール 

1、利用するデータベースを決める(利用するデータベースを後から変更可能)


  1.1 JDBCドライバーをプロジェクトのclasspathに通す
    ※利用するデータベースのJDBCドライバーは各ベンダーなどから提供されるか、ベンダーのホームページからダウンロードできます。
  1.2 DBスキーマを作成

2、hibernate.cfg.xml やhibernate.propertiesなどの設定ファイルを新規作成


  設定ファイルの詳細について、次の記事をご参照ください。
    →Hibernate設定ファイルその1 - hibernate.cfg.xml 
  例えば、次のようなhibernate.cfg.xmlを作成とします。
<?xml version="1.0"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">


<hibernate-configuration>
    <!-- セッション・ファクトリ定義 -->
    <session-factory>
        <!-- データベースの接続・設定(MySQLを利用する場合) -->
        <!-- JDBCドライバー(ここではMySQLのcom.mysql.jdbc.Driverを用いる) -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

        <!-- DB接続URL(適当修正してください) -->
        <property name="connection.url">jdbc:mysql://localhost/myproj</property>
        <property name="connection.username">myproj</property>
        <property name="connection.password">myproj</property>

        <!-- HibernateのDialect(方言)設定(ここではMySQLのDialectを用いる) -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>


        <!-- マッピングファイル&クエリの定義ファイル -->
        <mapping resource="TableName01.hbm.xml"/>

    </session-factory>
</hibernate-configuration>


3、テーブルごとのHibernate Entityファイルを新規作成


例えば、テーブルTABLE_NAME_01があるとします、次のEntityファイルを新規作成します。
TableName01.java
package mypackage;
import java.io.Serializable;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;

//テーブル:TABLE_NAME_01
public class TableName01 implements Serializable {
    //フィールド:TABLE_NAME_01.ID
    private String id;
    //フィールド:TABLE_NAME_01.NAME
    private String name;

    
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }


    /**
     * to string
     */
    public String toString() {
        return new ToStringBuilder(this)
            .append("id", getId())
            .toString();
    }

    /**
     * if equals or not
     * @param other Object
     * @return true/false
     */
    public boolean equals(Object other) {
        if ( (this == other ) ) return true;
        if ( !(other instanceof TableName01) ) return false;
        TableName01 castOther = (TableName01) other;
        return new EqualsBuilder()
            .append(this.getId(), castOther.getId())
            .isEquals();
    }

    /**
     * 
     * @return hash code
     */
    public int hashCode() {
        return new HashCodeBuilder()
            .append(getId())
            .toHashCode();
    }
}

※TableName01は普通のJavaクラスとの定義方法はほぼ一緒ですが、toString、equals、hashCodeメソッドを実装する必要があります。

4、テーブルごとのHibernate hbmマッピング設定ファイルを新規作成


そして、テーブルTABLE_NAME_01とTableName01をマッピングするための設定ファイルを新規作成します。

TableName01.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="mypackage.TableName01" 
    table="TABLE_NAME_01"
    lazy="false"
>
    <id
        name="id"
        type="java.lang.String"
        column="ID"
        length="32"
    >
        <generator class="uuid.hex" />
    </id>

    <property
        name="name"
        type="java.lang.String"
        column="NAME"
        not-null="true"
        length="100"
    />
</class>
</hibernate-mapping>


5、テーブルごとのDAOファイルを新規作成


TABLE_NAME_01を操作するためのDAOファイルを作成します。
※DAOの必要性について、次の記事をご参照ください
→ コアJ2EEパターン - Data Access Objectパターン

また、比較的に汎用的なDAOパターンを実装するには、共通で使用する機能を親クラスに、もしくはユーティリティクラスに抽象する手法が薦められています。
ここでは、その共通する機能の抽象クラスの実装を省きます。

TableName01Dao.java
package mydaopackage;

import mypackage.TableName01;

public class TableName01Dao extends CommonDao {
    //IDによるデータの取得
    public TableName01 getTableName01(java.lang.String id) {
        return (TableName01)super.get(TableName01.class, id);
    }

    //データの全件取得
    public List<TableName01> getAllTableName01() {
        return super.getAll(TableName01.class);
    }

    //データの更新
    public void updateTableName01(TableName01 entity) {
        super.update(entity);
    }

    //データの保存
    public void saveTableName01(TableName01 entity) {
        super.save(entity);
    }

    //データの削除
    public void deleteTableName01(TableName01 entity) {
        super.delete(entity);
    }
}


6、Hibernateを利用するビジネスクラスの作成


Main.java
package mypackage;

import mypackage.TableName01;
import mydaopackage.TableName01Dao;

public class Main {

    public static void main(String[] args) {
        TableName01Dao dao = new TableName01Dao();

        TableName01 entity = new TableName01();
        entity.setName("Some Name");

        try {
            //保存
            dao.beginTransaction();
            dao.saveTableName01(entity);
            dao.commitTransaction();

            //更新
            dao.beginTransaction();
            entity.setName("New Name");
            dao.updateTableName01(entity);
            dao.commitTransaction();
        } catch (Exception e) {
            dao.rollbackTransaction();
        }
    }
}


参考資料


Hibernate のSessionとSessionFactory

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments