OOPPart5を読むNHibernateの利用を簡略化するヘルパークラス(NHibernateHelper.cs)書籍Facadeの説明をする前にヘルパークラスの説明をしたいと思います。実装コードの全体を載せる前にまずはクラスのAPIから紹介します。}}前回紹介した注文Facadeクラスで使用したのはExecuteTransactionメソッドとGetCurrentSessionメソッドです。CloseSessionメソッドはその名の通り、NHibernateのSessionをクローズします。Loading機能が働かずにエラーが出たりするので、ASP.NET側のglobal.asaxでリクエスト処理終了時にクローズしています。SetConsoleOutToDebugWindowメソッドは開発者向けのヘルパーメソッドです。プログラムを実行する上では必要ありません。それでは実装コードの全体です。Methodパターンです。action)で実装します。あとはcurrentSessionがスレッド別に管理されるstatic変数になっているところも人によっては珍しく見えるかもしれません。static宣言していまう」とか危険すぎますからね(苦笑)。「sessionFactory」はスレッド別に管理しなくてもいいみたいです。ヘルパークラスですし、NHibernateのサイトからコピーしたコードも多いのでこのクラスに関する説明は以上で終わりたいと思います。書籍Facadeクラス(BookFacade.cs)さて、次は書籍Facadeクラスです。このクラスはPart3のaspxファイル内でObjectDataSourceによって呼び出されていたクラスです。}}前回紹介した注文Facadeでは書籍を1件だけ取得していましたが、こちらはドロップダウンリスト用にすべての書籍をリストとして取得しています。皆さんが目に付くのは以下の部分だと思います。book.BookName";これはHibernateやNHibernateで使用されるHQLというクエリ言語です。「奇妙なSQLだな〜」と思ったそこのあなた!!・・・最初は仕方がないかもしれません(苦笑)。これは「あくまで構文をSQLに似せただけのオブジェクト操作言語」です。カラム名」となりますが、このHQLでは「select」が省略されています。オブジェクトを完全に復元するしようとすると結局すべてのプロパティが必要になるので、必要なプロパティだけを指定する意味はありません。*」みたいな記述は原則不要となります(必要に応じてselectを書くこともできますがここでは割愛します)。selectが不要な理由は今説明したので、HQLの本質の部分を説明していくことにしましょう。HQLは確かにSQLっぽいです。SQLっぽいので、つい「HQL=SQL」と考えてしまい、不必要にHQLをSQLに近づけてしまう開発者も多いと思います。HQLはあくまでクラスやオブジェクトを操作するためのミニ言語になっています。HibernateやNHibernateを使うならHQLとSQLは似て非なるもの、という考えをもった上でHQLの扱い方を勉強した方が良いと思います。ここで重要なのはやはり「主役はオブジェクト」ということです。book」に出てくる「Book」はクラス名です。テーブル名ではありません。繰り返しになりますが、ここまでの説明でデータベースのテーブル設計に言及した箇所は全くありません。すべてクラスの話ばかりをしてきたはずです。book.BookName」の「BookName」も書籍クラスのプロパティ名です。book.BookName」というHQLは「保存されている書籍オブジェクトを書籍名順に並べて返せ」とNHibernateに命令していることになります。book.BookName」を以下のように読み替えるといいかもしれません。Book()」とは書けませんが。query.List();」で返却される書籍クラスのインスタンスは実際には和書か洋書のいずれかになります。オブジェクトを復元する過程でNHibernateが和書か洋書かを自動判別するので、開発者は和書と洋書の違いを意識する必要がありません。JapaneseBook」となります。ForeignBook」です。HQLがオブジェクトを操作するための言語であることが理解できている人はSQLのようにwhere句か何かでデータをフィルタリングする必要がない理由がわかると思います。書籍Facadeクラスの説明は以上です。今回はHQLの話を中心に説明しました。次回はよぉ〜〜〜〜〜〜やくデータベース関連の説明です。はてなブログPro株式会社ソニックガーデンで働くRubyプログラマ。2017年11月に「プロを目指す人のためのRuby入門」を出版。blog)はてなブログをはじめよう!JunichiItoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。