DBFlute -- DBアクセスポリシーのおさらい


_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
【簡単なSQL + 複雑だけど定型的なSQL
ConditionBean

【複雑でその場独自的なSQL
外だしSQL (+ Sql2Entityよる支援)
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

あまり開発者に色々な手段を提供したくはありませんので、
とにかく“ConditionBean”と“外だしSQL”を覚えてもらうというスタンス。

<ConditionBeanのメリット>
S2Dao”は強力な「SQLコメントによる外だしのSQL」をサポートしますが、
【簡単なSQL + 複雑だけど定型的なSQL】をTypeSafeで実装する手段がありません。
「全て外だしSQLで実装」だと、DB変更に弱い上、SQLファイルの数が膨大になります。
→ 独自機能のConditionBeanを利用して、TypeSafeにDBアクセスします。

<外だしSQLのメリット>
Apache Torque”は強力なCriteriaというSQL生成Objectがありましたが、
実現できない複雑なSQLを書く必要が出てきたときの最終手段が存在しません。
DBFluteではS2Daoをそのまま利用して、“外だしSQL”として複雑なSQLを実装します。

<Sql2Entityののメリット>
S2Dao”は強力な「SQLコメントによる外だしのSQL」をサポートしますが、
SQLに対応する戻り値Entityが実存Tableと同じ構造で無い場合(GroupByなど)、
その戻り値Entityを自分で作成する必要があります。
また、自分で作成するとスペルミスなどでEntityとSQLのSelect句のMappingがズレて
しまうなどで、作成が面倒なだけでなく、間違いも生みやすいです。
DBFluteでは外だしのSQLファイルを読み込んで、そのSQLのSelect句に合致する
戻り値Entityを自動生成します。(Sql2Entity)

※これは、S2Daoの素晴らしい機能「SQLコメントによるTest値付きBind変数」を
利用することで実現することができました。


<補足>
> “S2Dao”は強力な「SQLコメントによる外だしのSQL」をサポートしますが、
> 【簡単なSQL + 複雑だけど定型的なSQL】をTypeSafeで実装する手段がありません。

S2DaoにもSQLを生成する機能は存在しますが、
http://dbflute.sandbox.seasar.org/ja/introduction.html
に記載している通り、「結合Tableの選択ができない」点において
実開発では採用できないと自分は考えています。