O/R Mapperフレームワークに求めるものメモ

ふぅ。やっと社会人初プロジェクトのリリースが見えてきた。久々のJava案件で何度かRubyに戻りたくなったけど僕は元気です。

ただこれだけはどうしても生産性の面で下せない部分があった。それがO/R Mapper、iBatisを使ってたのだけれど、今まで何度か使ってきたActiveRecord/S2JDBCに比べるとてんでだめ。
逆に、iBatisのほうがMaster/Slaveのサポートなどスケーラビリティのサポートは手厚かったりするのだけど。

今後、O/R Mapperを選ぶ基準みたいなものが浮かびあがってきたので忘れないうちにメモ。

スケーラビリティを確保するためのアドオン

Master/Slave、テーブル分割のサポートなど。
結合の戦略としてJoinにするかfk抽出→Inで問い合わせ
など設定できたら素敵。

少ない設定

アノテーションで設定/適切なデフォルト。

Lazy Loading

S2JDBCからは意識的にけずられている機能だけど、
→結合をきにせずさくっと動くものを作って
→パフォーマンスの問題があればEagerに置き換え
ってサイクルで開発できるので欲しい。

HibernateのようにEntityへの動的プロキシで実装
されたものは高コストなので、関連をたどるコード
を生成してくれるほうがありがたいかも。

いざってときにSQLをかける

このへんはS2JDBCの外出しSQLが素敵。
逆にHQLやらJPQLやらよくわかんないものはNG。

Entityといっしょにメタ情報を提供

フレームワークというよりジェネレータの機能になるけど。
S2JDBCのジェネレータを使うとフィールド名
のメタ情報をEntityNamesというクラスとして提供してくれる。

このメタ情報がいろいろと活用できそう。
例えば複数の社員から社員名だけ抽出したい場合

Entities.extract(employees, EmployeeNames.name);

みたいにタイプセーフに書ける。



こうやって書き出しみると、俺はかなりS2JDBC好きなのが分かるw
LazyLoadingとスケーリングをサポートしてくれたらとりあえず言うことないなぁ。