「S2JDBCで生産性10倍」

いつまでも大宮デン助が最新日記に出るのもアレなので、たまには仕事方面の話を書いてみます。

Seasarというオープンソースプロジェクトがありまして…なんて書かなくてもいいな、知ってる人は知ってるし知らない人はスルーすれば良いから。

データーベースに関するプロダクトの新バージョンがもうすぐリリースされるのですが、こんな感じで表記できるのがミソ。

List results = jdbcManager.from(Employee.class)
                             .join("department")
                             .where("name like ?", "S%")
                             .orderBy("name")
                             .getResultList();

↑ひがやすをさんのブログd:id:higayasuo:20071018より:
  #はてな記法がよくわからんorz

今のどっしりしたJPAと比べれば、確かに直感的で分かりやすい。Seasarの「気持ちのいいプログラミング環境」っていう意味では間違いなく正常進化だと思う次第です。

さて、本家「生産性10倍 c by Steve Jobs」のWebObjectsの場合、ここらへんはEOFetchSpecificationっていうクラスを使います。

  #もっとも…純正開発ツールがnon supportedになった今となっては、さすがに「10倍高い」とは言わないけどねorz

上と同じことをするには、

        EOQualifier qual =  EOQualifier.qualifierWithQualifierFormat("name like 'S*'", null);
        NSArray sorts = new NSArray(EOSortOrdering.sortOrderingWithKey("name", EOSortOrdering.CompareAscending));
        EOFetchSpecification fs = new EOFetchSpecification("Employee", qual, sorts);
        NSArray results = editingContext().objectsWithFetchSpecification(fs);

で、リレーションの設定はeomodelで書いてあるからここでは必要なし。もし、特定のdepartmentに属するユーザだけをfetchしたい場合には

  EOQualifier qual = EOQualifier.qualifierWithQualifeirFormat("department = %@", new NSArray(department));

と書けば、勝手にprimary key / foreign keyの処理なども済ませてくれる。

また、editing contextはキャッシュ兼コミットバッファみたいなもんなので、トランザクションに関する細かいことは気にしなくて良い。

例えば、上でfetchしてきたarrayの中の各Employee全員をnewDepartmentに移籍させちゃう場合には、

        Enumeration enu = results.objectEnumerator();
        while (enu.hasMoreElements()) {
                Employee eo = (Employee)enu.nextElement();
                eo.setDepartment(newDepartment);
        }
        try {
                editingContext().saveChanges();
        }
        catch.... {
        }

で片づいてしまう。ラクー。

WebObjectsで飯を食う」クラハシはAppleに振り回されるのも辛い高齢者なので、軸足をWebObjectsに置きつつも、あちこちつまみ食いしている今日この頃です。

その中でSeasar2はダントツに気持ちが良いので本気でお勉強をしているんだけど…比較的WebObjectsの考え方に近いS2Hibernateを持ってしてもまだWebObjectsの方が生産性高いし、気持ち良いんだよなぁ。

  #hibernateの設定ファイルがイヤ…EOModeler並のツールが欲しい←自分で作れ←ムリです

ただ、Seasarが確信を持ってどんどん前に進んでいくのがうらやましい。

どんなに良いプロダクトでも、ほったらかしじゃ死んじゃうよ>Apple