先月完了した「ふつケル写経会」に続き、今月からはPythonの入門書を使った「みんPy写経会*1」を開催します。「みんなのPython」を題材として、サンプルコードなどを写経する勉強会です。来週の10/13(金)から毎週金曜日、19:00〜20:30の1時間半です。行ってきたどー!!大阪!!という訳で、9月30日(土)にワッハ上方で開催された「XP祭り関西」に参加してきました。的に濃度がとても濃くて大変楽しいイベントでした。XP」[*1]を有志が演奏[*2]をして、大いに盛り上がり、充実した1日を過ごすことが出来ました。東京<=>大阪を0泊2日の強行軍でしたが、多くの方からパワーと勇気をもらえた一日でした。┗【プログラミング】Cayenneで始めるO/Rプログラミング[4]最近我が家の黒テレビの調子が、悪くなってきました。実は22年近くも使い続けているテレビなんです。テレビ見ると思うんです。先日AppleがiTVの発表がありました。mini+シネマディスプレイ+TVチューナーで、リビングテレビなんてことを模索していたんですが、ちょっとそこまで持たないかも。それならiMac24インチか!?と思ってるのですが、想像だけでも財布が寒くなってきましたので、この辺で本題へ。前回の宿題としていた会員データ登録クラスですが、ヒントの通りmainメソッドだけを変更することで対応できます。}どうですか?わからなかった人は、上の例を参考に今回の例に進んでください。今回は「ビデオを探す」例を紹介したいと思います。思いつくのが探し方です。プログラムではよく以下の2つの方法が取られています。・主キーで探す・主キー以外の列で条件に一致する一覧を取得する。O/Rプログラミングでも、基本的な考え方はまったく同じです。ビデオ検索クラスを作って検証してみましょう。}}さて、このままではうまく動作しません。コンパイルエラーになりますね。際Videoクラスには、findByPrimaryKeyやgetIdといったメソッドはありません。Videoクラスをカスタマイズする方法も兼ねて、主キーで検索する方法について考えてみたいと思います。findByPrimaryKeyメソッドを、Videoクラスに作ってみましょう。主キーで検索するためには、2つの手法があります。上記はCayenneが管理するキャッシュにデータがある場合は、DBから取得せずにキャッシュから戻す方法、下記はDBから取り直してキャッシュを最新に更新する方法です。id);下記は以下の通りになります。query);この使い分けはケースバイケースだと思いますが、今回はキャッシュを使わない方式で進めたいと思います。この修正はVideoクラスに行います[*1]。ObjectIdの表現は良く使うので、各クラスにメソッド化しておくのが良いでしょう。getIdメソッド、はCayenneのドキュメントに紹介されている方法のまま取り入れています。これで前回作った「紅の豚」を検索してみたいと思います。ms.・・・省略ビデオID:100タイトル:紅の豚どうですか?100を入力したら「紅の豚」が表示されますね。JDBCプログラミングよりも、遥かに直感的でわかりやすいソースになっています。video.setTitle(rs.getString("title"));のようになっていました。登録の時に比べると、だいぶ手続きが多くなっていてマジックナンバーも多く使わなければなりません。O/Rマッパを使ったソースの見易さ、メンテナンス性の良さを、少しずつ実感できますね。続いて「主キー以外の列で条件に一致する一覧を取得する」方法を、紹介したいと思います。ここでの例は「タイトルの一部に検索文字列を含む」ものとます。部分一致による検索です。}「主キー以外の列で、条件に一致する一覧を取得する」場合に必要なのが、SelectQueryクラスです。これは、名前の通りSELECT文を使ってデータを取得するためのクラスになります。context.performQuery(query);というコードになります。ここに条件を付加していく形となります。今回は簡単な例ですので、SelectQueryのコンストラクタで条件を指定します。検索条件は、Expressionクラスを使って作ることができます。Expressionのインスタンスは、自らnewして作ることも可能ですが、ExpressionFactoryを使うのが簡単です。ExpressionFactoryには、部分一致検索を作るlikeExpの他にも、完全一致(machExp)、大小比較、範囲などの検索条件を作るファクトリメソッドが準備されていますので、詳しくはJavaDocなどのドキュメントを参照ください。件を作ったら、DataContext#performQueryメソッドを使って検索を実行します。結果はSelectQueryの第1パラメータで指定したクラスのオブジェクトがリストで戻ります[*3]。検索条件に「豚」と入れて検索を実行してみましょう。紅の豚どうですか?主キーで検索した時と同じように、SQL文が自動生成されて検索が実行されましたね。実際のシステムではもっと複雑な検索が要求されると思いますが、今回はここまでとします。複雑な検索例については、本シリーズ内でいずれ取り上げますので、しばらくお待ちください。次回は「ビデオを借りる」という視点で関連先とのリンク方法について紹介していきます。(きしだ)[*1]:CayenneではVideoと_Videoというような2つのクラスが生成されます。Videoの中身は空で、実際の実装は_Videoにあります。