
[IT Architect連動企画]
連載:Hibernateで理解するO/Rマッピング(4)
簡単なプログラムでO/Rマッピングを体験
|
|
データベースアクセスプログラムの作成 |
■検索プログラムの作成
ではいよいよHibernateによるデータベースアクセスプログラムを実装し、動作させてみます。初めにデータ検索用のサンプルプログラムを作成します。「src」ディレクトリに次のFindSample.javaを作成してください。
| リスト4 FindSample.java import java.util.List; |
import entity.Emp; |
プログラムを実行すると、以下のような出力情報がコンソールに表示されます。
![]() |
| 画面2 サンプル実行結果 (クリックすると拡大します) |
Hibernateを使ってレコードを検索する方法はいくつかありますが、ここではnet.sf.hibernate.SessionインターフェイスのcreateCriteria()メソッドを使用しています。このメソッドの引数に対象テーブルの永続化クラスを指定することでnet.sf.hibernate.Criteriaオブジェクトを取得することができます。Criteriaオブジェクトはテーブルに対するクエリ用オブジェクトであり、このサンプルのような単純な全件検索のほかにExpressionオブジェクトを利用した条件検索も可能です。
Criteriaオブジェクトからはlist()メソッドを使って、レコードをListオブジェクトとして取得します。whileループの中で1件ずつEmpオブジェクトにキャストしながらgetterメソッドを呼び出してデータを取得しています。
■更新プログラムの作成
続いてEMPテーブルに対する更新を行ってみましょう。「src」ディレクトリに以下の「UpdateSample.java」を作成してください。
| リスト5 UpdateSample.java import entity.Emp; |
import net.sf.hibernate.HibernateException; |
このプログラムではEMPNOが「1」であるレコードのJOBを「Sales」に更新するプログラムです。更新前のレコードは以下のようになっています。
![]() |
| 画面3 更新前のレコード |
ここでUpdateSampleを実行してください。実行後JOBの値が「Architect」から「Sales」に変更されていることを確認できます。
![]() |
| 画面4 更新後のレコード |
データベースの更新処理ではトランザクション制御が必要になってきますが、HibernateではSessionオブジェクトのbeginTransaction()メソッドによって取得するnet.sf.hibernate.Transactionオブジェクトを使用してトランザクション制御を行います。
このプログラムで使用しているSessionオブジェクトのload()メソッドは、1件のレコードを主キーによって取り出す際に使用します。load()メソッドによって取得したEmpオブジェクトのsetterメソッドを使って更新する値を指定し、Sessionオブジェクトのupdate()メソッドを呼び出せば更新終了です。トランザクションをコミットすることを忘れないでください。
データを更新して永続化(データベースへの保存)するには通常SQLのUPDATE文を記述しますが、Hibernateを使用すればオブジェクトのプロパティを変更するだけの手軽さで更新処理が実行できることが体験できたと思います。
■挿入プログラムの作成
続いてデータ挿入のサンプルプログラムです。UpdateSample.javaと同様に、「src」ディレクトリにInsertSampleというクラスを作成しましょう。
| リスト6 InsertSample.java import entity.Emp; |
import net.sf.hibernate.HibernateException; |
このプログラムでは新しいEmpオブジェクトを生成し、各プロパティに対するsetterメソッドを用いてデータをセットしています。データをセットし終えた後はSessionオブジェクトのsave()メソッドを用いて永続化(データの挿入)を行っています。
プログラムを実行後、EMPテーブルを検索すると、新しいレコードが挿入されていることが確認できます。
![]() |
| 画面5 新しいレコード挿入後のEMPテーブル |
■削除プログラムの作成
続いて先ほど挿入したデータを削除します。次のようなDeleteSample.javaを作成してください(ほかのコードと同じ部分の記述は省略しています)。
| リスト7 DeleteSample.java |
…(中略 トランザクションの開始まではInsertSampleと同じ)… |
プログラムを実行後、テーブルを確認してください。先ほど挿入したデータが削除されていることが確認できますね。
|
|
まとめ |
今回は単純な「検索・更新・挿入・削除」の操作を行いました。O/Rマッピングフレームワークを利用することでテーブルのレコードをオブジェクトとして扱えるため、データ取得後にカラムごとの型を気にして取り出すような処理を記述する必要はありません。JDBCの記述と比較して非常にシンプルなプログラムになることが理解できたと思います。
またEntity Beanを利用したことがあれば、Hibernateが提供するO/Rマッピングの手軽さを特に実感できたのではないでしょうか。Entity BeanではEJBコンテナへのデプロイが必要ですが、Hibernateを使うとコンテナへのデプロイの必要はありません。そのためJ2EEアプリケーションサーバーを使ったWebアプリケーションのみならず、Javaを利用するアプリケーションすべてに使用することができます。またデプロイが必要ないためローカルでの単体テストが容易に実行できます。
このようにHibernateはO/Rマッピングを解決するソリューションであり、Entity Beanよりもシンプルな仕組みを持っています。次回はHibernateを実践的に使えるレベルまで解説を進めていきたいと思います。
| 2/2 |
|
INDEX |
||
| 第4回 簡単なプログラムでO/Rマッピングのメリットを体験 | ||
| Page1 接続ファイルの準備 マッピングファイルの準備 永続化Javaクラスの作成 |
||
| Page2 データベースアクセスプログラムの作成 |
||
| 筆者プロフィール |
| 山本 大(やまもと だい) 株式会社クロノスに勤務するITアーキテクト。甲南大学 経営学部 卒業。J2EE、.NETにこだわらずベストソリューションを提供できるマルチプラットフォームアーキテクトを目指す。『XMLマスター教科書 プロフェッショナル』(翔泳社)や雑誌などで執筆活動も行っている。 |
Hibernateで理解するO/Rマッピング バックナンバー
- 第1回 O/Rマッピングの役割とメリット
- 第2回 JavaにおけるO/Rマッピング
- 第3回 Hibernateを試すための準備
- 第4回 簡単なプログラムでO/Rマッピングのメリットを体験
- 第5回 SQLに似たHQLでリレーショナルデータを柔軟に検索
- 第6回 O/Rマッピングの導入効果を測る
| Java Solution全記事一覧 |
TechTargetジャパン
- 並列分散処理の常識をHadoopファミリから学ぶ (2012/2/8)
並列分散処理の課題やHadoopの長所/短所、そして短所を補うHadoop関連プロジェクトの構成や概要などを簡単に紹介 - WebLogicサーバ最新版「12c」の気になる4つの特徴 (2012/1/31)
久々にメジャーアップグレードしたJavaアプリケーションサーバについて、製品担当者に軽量インストーラなどの特徴を聞いた - GitHubをもっとソーシャルに使いこなすための7つ道具 (2012/1/23)
ソースコードホスティングのGitHub周辺で便利な新サービスが続々登場しているので、まとめて紹介しよう。特に連動クラウド「fluxflex」が注目だ - 新キャラ登場!スクラムやるならRedmineとALMinium (2011/12/26)
「黒板を“かんばん”にしてたら先生に怒られた(T_T)」「管理はPC内でやればいいのよ」「承知しました」
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -




