連載
» 2004年08月26日 00時00分 UPDATE

Hibernateで理解するO/Rマッピング(4):簡単なプログラムでO/Rマッピングを体験 (1/2)

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

[山本大,株式会社クロノス]

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

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

接続ファイルの準備

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

<?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>
リスト1 接続定義ファイル「hibernate.cfg.xml」

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

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

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

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

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

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

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

<?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>
リスト2 テーブルとのマッピングファイル 「EMP.hbm.xml」

永続化Javaクラスの作成

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

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

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;
}
}
リスト3 永続化Javaクラス
       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。