読者になるka-ka_xyzの日記この広告は、90日以上更新していないブログに表示しています。ORMまえがきこの記事はオブジェクト関係マッピング(ORM)を実装する方法がどうこうという話ではなく、単に愚痴です。事の起こり社内の新規プロジェクトで「具体的な機能要件もUIも決まっていないが、新規公開サービスについてある機能(といってもそれなりに複雑なWebアプリを一つ必要とする程度にはヘビー)だけ先にお前が実装してみてくれ」というタスクが出されるそんな事言っても機能要件とDBテーブル定義ぐらいは最低限何とか決めておいてくれと頼んだものの、その辺は適当にやっておけと言われる(この辺は色々と事情があるので、仕方が無い面もあるが・・・)とりあえず似たような機能を持つ既存システムのテーブル定義を拡張したテーブルを使用したり(というかこの段階では既存システムのテーブル定義を流用するという話だった)、DBアクセスの無いモックDAO実装を作って開発実装を進める。この頃までは、DAOを抽象化しておけばある程度テーブル定義が変わっても他の部分に影響を及ぼさずに何とか行けるだろうと楽観視してた。先行公開の数週間前になって、具体的な機能要件やテーブル定義が決定。俺涙目(いまココ)ということで、DAO(とその他関連箇所)を書きなおすために様々なORMを触り、実装してはまた捨て・・・という賽の河原的な作業をやっていたので、せっかくなのでまとめてみます(実装コード等は勘弁)。Java.netInterfaceへのAnnotationをベースにした軽量ORM。JPAである必要はなくテーブル構成もろくに決まっておらず、しかもなるべく簡単に手早く実装する必要があるプロジェクトなので、先ず最初に検討したのがコレ。repositoryを見ると0.9.21が出ている模様。0.9台ではAnnotaionクラスが大幅に変わっている様子だが、どうもその辺を解説したドキュメントが(もちろん英文含めて)見つからない。GitHub良さそうではあるものの、業務システムでの使用実績がいまいち見つからなかったので、涙を飲んで断念。あと、もう1年以上ソースがコミットされていないのが気になる。Component古参のJDBCユーティリティ。最新バージョンの更新日は2012-07-20。枯れたと思っていたけど結構ちゃんとメンテされてるもんだな。BeanへMappingしてくれる。Beanについては手作業でコーディングする必要がある(過去に機能追加要求で度々議題に上がっているものの「ウチはORM作ってるわけじゃない」という理由でRejectされてる。あと、更新系クエリについては完全に手で書く必要が有るので煩雑。Homeここまで調べてみて、もう「軽量」ORMには自分の探しているモノが無いかも・・・ということで、EclipseLinkを試す。Annotationベースで設定できるはJPQLはネイティブSQLと比較すれば簡単に書けるわ、さらにはDDLも自動生成してくれるわで申し分無かったものの・・・ここらへんの時期にテーブル実装がカッチリ決まる。一応、こちらからもJPAアノテーションを元にして生成したテーブル定義を提案したものの、蹴られて終了。JPAが真価を発揮するのはJavaコードからテーブル定義を生成するような場合であり、既存テーブル定義が存在する場合にはJPA使ってもメリットは薄れるよなあ・・・・工数に余裕があればなんとかなると思うものの、涙を飲んで見送り。イントロダクションということでテーブル定義が決まったことで、ネイティブSQL定義を呼び出すタイプのORMを探す方向へ切り替える。最初に思いつくのがMyBaits。GeneratorでBeanとMappingファイルを生成するか、あるいは既存BeanにAnnotationを付けて何とかするか、検討中。Domaプロジェクトへようこそドキュメントを読む限り、自分が抱えてる要求にぴったり合うのはDomaな気がしてきた・・・ちょっと実装してみて感触を探る。き当たりばったりじゃなくて、ちゃんと設計したいです。参考文献まあ、ORM実装がどうこういう問題じゃ無いよね本質的に。Hectorを触ってみた。12はてなブログをはじめよう!ka-ka_xyzさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。