容:講演、ワークショップ参加費:講演会3,000円、懇親会4,000円サイトでの詳細ページ公開は、11月15日頃を予定しています。次回のメルマガで改めて告知します。申し込み受付は11月22日を予定しています。shuffleが発売になりました。友人が電車で使っていたら、目の前に座っていた若者が大きい声で「新しいシャッフルだよー」と叫んだそうです(笑)。shuffleをプレゼントする」とメールを送ったとの噂が。ホントのところはどうなんですかねー。今回は、「ビデオを借りる」例を紹介したいと思います。通常借りる人(アクター)は会員ですが、ここではビデオ店員がシステムに貸出データを入力するというシナリオを想定します。このシナリオの前提条件は、以下の通りです。・会員がビデオを選んで貸出カウンターへ持ってくる実行するシナリオは以下の通りで、今回例外シナリオは想定しない事とします。・店員は会員から会員証、ビデオケースを受け取る・店員はビデオメディアを探す・店員は貸出条件を会員から聞く・店員はシステムに貸出データを入力する・店員は会員に貸出料金を提示して会計をする・店員は会員に会員証を返却し、ビデオを貸し出す本メルマガでは会計部分は範囲外とし、貸出データの登録にフォーカスします。実際にTRYしてみましょう。前の事になってしまったので、貸出データのテーブルがどんなものだったのか忘れてしまったかもしれません。振り返っておきましょう。(`id`));「店員は会員から会員証、ビデオケースを受け取る」から考えます。店員は会員証から会員ID、ビデオケースからビデオIDがわかるものとします。簡単に考えると、setVideoIdメソッドとsetMemberIdメソッドでセットすれば良いという事が想像できます。会員のようなクラスの関連を実現するために、以下のようなコードを記述するでしょう。・・・(省略)}O/Rマッピングで関連を実現する場合も、考え方は同じです。旧来の手法でJDBCプログラミングをしていた頃は、上記のようなオブジェクト構造にはならずに、テーブル構造と同じクラス定義を持っていたはずです。上はデータベースと1対1になっているので、一見するとわかり易いように思えるのですが、実際には存在チェックや関連先の値の取得など、複雑なコードを記述しなければならない事が多いのです。今回はビデオを借りるというシナリオの中で、O/Rマッピングの特徴の1つでもある、関連データの取り扱いのすばらしさを体感して欲しいと思います。前置きが長くなりましたが、自動生成された_Lendingクラスを見てください。作成されたメソッドには、ビデオIDや会員IDを扱うメソッドがないですね。その代わり上記のクラスと同じように、ビデオや会員のオブジェクトを扱う以下のメソッドがあるはずです。getToVideo()つまりO/Rプログラミングはデータベースを意識せずに、Javaのオブジェクトをセットしていけば良いわけです。実際に貸出と会員・ビデオの関連を、作成してみましょう。ビデオは前回にfindByPrimaryKeyメソッドを作りました。会員についても同様に、メソッドを作ってみましょう。}}ここまでくれば、後は会員IDとビデオIDを入力して、検索したデータをセットするだけです。シナリオでは、「店員はシステムに貸出データを入力する」という部分に該当します。・・・(省略)}VideoLenderクラスは、以前のVideoRegisterクラスなどと同じようにinit,main,endから成り立つ登録系のクラスとします。[*1]ではmain処理を見てみましょう。}標準入力からビデオID、会員ID、貸出日数を入力します。IDはそれぞれ、findByPrimaryKeyメソッドでオブジェクトを取得します。返却日についてシナリオでは、「店員は貸出条件を会員から聞く」に該当します。今回のサンプルでは、貸出条件を貸出日数という事にします。プログラム上では、Calendar#add()メソッドで日数を加算して計算する、簡易なものとします。新しい貸出オブジェクトの作成は、ビデオや会員の時と同じようにcreateAndRegisterNewObjectメソッドで、コンテキスト内に登録待ち状態としてアサインしておきます(endメソッドのcommitChangesでデータベースに反映されます)。それでは実際に実行してみましょう。committed.関連先のマスタデータを主キーで検索し、検索結果のオブジェクトをセットしたにも関わらず、INSERT文に渡される値は、実際のカラムであるIDの値(この例では入力した会員ID=1234とビデオID=100)だけです。ID以外の属性はここでは使われていません。実はこれだけなら、従来のSQL文を記述したようなJDBCプログラミングの方が、DBを扱うコードが少なくて良かったかもしれません。実際にこれで何がうれしかったのでしょうか?実はこのコード例はO/Rマッピングの関連を取り扱う最初の1歩に過ぎません。O/Rマッピングにおける本当の実力は、もっと強力なものです。おっと!今回も時間が来てしまいました。次回は関連の技術をもっと深く探っていきますので、ご期待ください。(きしだ)[*1]該当号の過去ログは、下記URLより確認ください。http://www.objectclub.jp/ml-arch/magazine/160.html_______________________________________________________________________この記事への評価にご協力をお願いします。URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用のブラウザに表示されれば投票完了です。連想検索こんにちは、hiroshiです。過ごしやすい季節もそろそろ終わりに近づき、最近はめっきり寒くなってきました。こんな時には、紅葉でも見ながらゆっくりお酒でも飲みたいものです。先週の三連休には紅葉を見に行こうと思い立ちましたが、朝の紅葉地の渋滞の酷さに断念してしまいました。皆様いかがお過ごしでしょうか。今回は「連想検索」について紹介します。提案書や資料を作成するために、ネットを使いますが、なかなか自分にヒットした内容が出てきません。同じような体験が皆様もあるのではないでしょうか。今回紹介させていただく「連想検索」は、そんな思いを解決してくれるかも知れません。「連想検索」とは何なのでしょうか。通常の検索では、キーワードを入力してそれにヒットする情報を引っ張ってきます。このキーワードがミソなのです。僕の場合は欲しい情報が漠然としているので、有効なキーワードが入力できません。「問題」を入力して検索していました。これでは、僕のイメージしている文章に行き着くのは時間がかかります。「連想検索」は、「今IT業界で問題になっていること」という文章を検索キーとして、連想できる情報を探し出してくれるものです。類似性をとらえる検索方法であることから、「あいまい検索」や「概念検索」と呼ばれることもあるようです。「連想検索」は、どのような仕組みで類似性を捉えているのでしょうか。化して説明してみましょう。連想検索は、まず検索キーとして与えられた文書から、その内容を特徴的に表すような単語群(特徴語群)を抽出します。次に、抽出された単語から、今度は文書を検索します。いうこの2つのプロセスを踏むことで、類似文書の高速な検索を実現しています。章なら50語程度、専門的な学術文献であれば200語程度で、文書の持つ特性を表す「特徴語群」が得られると言われています。WebcatPlusを使用してみました。このサイトは書籍検索を目的としているため、入力した文章に関連のある書籍が検索結果として表示されました。これでも、何も解らずにキーワード検索するよりは、情報が記載されている具体的な物に辿り着けるため助かります。その他、連想検索の利用状況を見てみると、主に書籍データベースの検索システムに使われているようです。今後は一般の検索サイトのような、巨大な検索システムに活用されることを期待しています。(hiroshi)_______________________________________________________________________この記事への評価にご協力をお願いします。URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用のブラウザに表示されれば投票完了です。ホントのところ今週は「ペンケースの中に何が入ってますか?」のホントのところ。打ち合せの時に大きなペンケースを持っている人がいました。何が入ってるんでしょうか?興味深々です。そんなわけで、今回はあなたのペンケースの中にどんなものが入っているのか教えてくださいね。