IT Architect連動企画]
連載:Hibernateで理解するO/Rマッピング(4)

簡単なプログラムでO/Rマッピングを体験


O/Rマッピングは、従来の煩雑なデータベースに関する処理の記述をスマートにし、柔軟なアプリケーションの構築を可能にします。本連載ではオープンソースのO/Rマッピングフレームワーク「Hibernate」を用いてO/Rマッピングの基礎を解説します。そしてさらに、J2EEアプリケーションへの実践的な適用方法とそのメリットも紹介していきます。(編集局)

クロノス
山本大
2004/8/26

 前回「Hibernateを試すための準備」はHibernateを使うためにHibernateやデータベース(MySQL)のセットアップ、そして開発環境として使用するEclipseを使い、プロジェクトの作成までを行いました。

 今回は、実際にサンプルプログラムを動作させることで、O/Rマッピングフレームワークを使用した場合のデータベースアクセスがどのようなものであるかを見てみましょう。この回から本連載を読み始めた読者は、前回「Hibernateを試すための準備」を読んで環境をセットアップいただき、ぜひ試してください。

接続ファイルの準備

 まず、Hibernateを使ってアプリケーションとデータベースを接続するための接続定義ファイルを用意します。以下に示す「hibernate.cfg.xml」というファイルを作成してください。このファイルはクラスローダーが読み取り可能なディレクトリに配置する必要があるため、「HibernateProject/config」ディレクトリに保存します。

リスト1 接続定義ファイル「hibernate.cfg.xml」
<?xml version="1.0" ?>
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd" >
<hibernate-configuration>
<session-factory>
        <!--MySQL JDBC Driver connection -->
        <property name="connection.driver_class">org.gjt.mm.mysql.Driver
        </property>
        <property name="connection.url">jdbc:mysql:///test</property>
        <property name="connection.username">root</property>
        <property name="connection.password">mysql</property>
        <property name="dialect">net.sf.hibernate.dialect.MySQLDialect
        </property>
        <property name="show_sql">true</property>
        <property name="use_outer_join">true</property>
        <!-- Mapping files -->
        <mapping resource="EMP.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

 この接続定義では、以下の情報をHibernateに知らせます。

表1 接続定義ファイル「hibernate.cfg.xml」の内容
ソフトウェア 名称
connection JDBCへの接続定義(データソースからJDBC接続を取得することも可能)
dialect RDBMSに固有のSQL方言(dialect)を吸収するクラスを指定
show_sql 発行したSQL文を標準出力にアウトプット
use_outer_join リレーションが指定されたオブジェクトの階層をたどってデータを取得
mapping resource 使用するマッピングファイルを指定

 接続定義ファイルにはほかにも多くのパラメータが存在しますが、今回のサンプルではこれだけの指定で十分です。パラメータの詳細に関してはHibernateのマニュアルを確認してください。

マッピングファイルの準備

 次に、データベースのテーブルとJavaクラスをマッピングするための定義を記述した、マッピング定義ファイルを用意します。このサンプルプログラムでアクセスするテーブルは表2に示す定義の「EMP」テーブルです。EMPテーブルには画面1のようなレコードが格納されています。

表2 EMPテーブルの定義
列名 データ型 主キー NotNull
EMPNO INTEGER
ENAME VARCHAR(10)
JOB VARCHAR(10)
HIREDATE DATE

画面1 EMPテーブルのレコード

 マッピング定義ファイルを「EMP.hbm.xml」という名前で作成します。このファイルもクラスローダーによる読み取りが必要なので、「HibernateProject/config」ディレクトリに保存します。

リスト2 テーブルとのマッピングファイル 「EMP.hbm.xml」
<?xml version="1.0" ?>
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
    <class name="entity.Emp" table="EMP">
        <id name="empno" column="EMPNO"  type="int" >
            <generator class="assigned" />
        </id>
        <property name="ename" type="string" column="ENAME" />
        <property name="job" type="string" column="JOB" />
        <property name="hiredate" type="date" column="HIREDATE" />
    </class>
</hibernate-mapping>

永続化Javaクラスの作成

 次に作成するのはJavaアプリケーション内で使用する永続化クラスです。このクラスでは「EMP.hbm.xml」ファイルで<property>要素のname属性として記述したフィールドを定義し、各フィールドに対するgetter/setterのアクセッサメソッドを実装します。Hibernateは、データベースのデータをこのオブジェクトに格納してアプリケーションに引き渡します。この永続化クラスはEntity Beanのように特別なインターフェイスを実装せず、Serializableインターフェイスのみを実装したシンプルなオブジェクトです。

 リスト3のソースコードを作成してください。なお、このクラスのパッケージは「entity」としていますので、「HibernateProject/src/entity」というディレクトリ構成を作成してソースを保存してください。

リスト3 永続化Javaクラス
package entity;

import java.io.Serializable;
import java.util.Date;

public class Emp implements Serializable {

private Integer empno;
private String ename;
private String job;
private Date hiredate;

public Emp() {}

public Integer getEmpno() {
    return this.empno;
}

public void setEmpno(Integer empno) {
this.empno = empno;
}

public String getEname() {
return this.ename;
}

public void setEname(String ename) {
this.ename = ename;
}

public String getJob() {
return this.job;
}

public void setJob(String job) {
this.job = job;
}

public Date getHiredate() {
return this.hiredate;
}

public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
}

1/2

 INDEX

第4回 簡単なプログラムでO/Rマッピングのメリットを体験
Page1
接続ファイルの準備
マッピングファイルの準備
永続化Javaクラスの作成
  Page2
データベースアクセスプログラムの作成


Java Solution全記事一覧

TechTargetジャパン

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH