「S2JDBCで生産性10倍」
いつまでも大宮デン助が最新日記に出るのもアレなので、たまには仕事方面の話を書いてみます。
Seasarというオープンソースプロジェクトがありまして…なんて書かなくてもいいな、知ってる人は知ってるし知らない人はスルーすれば良いから。
データーベースに関するプロダクトの新バージョンがもうすぐリリースされるのですが、こんな感じで表記できるのがミソ。
Listresults = 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