最近,S2Daoを使うことが多いのですが,シンプルでよいO/Rマッパーなのですが,細かいところで煩雑なことが増えてきました.
- DaoやEntityは手動で作る(コーディング)必要がある.
- Daoだけでは煩雑な処理をBehaviorを簡単にできる.
- ConditionBeanによって動的なSQLを生成できる.
というのが大きなメリット
Behaviorを使うと,insertOrUpdateメソッドってかなーり便利ですね.
これと同じことをDaoで行うと,SELECT後に存在すればUDPATE, 存在しなければINSERTの処理をDaoのメソッドを使って実現しなければいけません.相当煩雑です.
public class Xxx { public void setBookBhv(BookBhv bookBhv) { this.bookBhv = bookBhv; } public void executeXxx() { final Book entity = Book(); entity.setBookId(123); entity.setBookName("xxx"); this.bookBhv.insertOrUpdate(entity); } }
ConditionBeanを使うと複雑な問い合わせを簡単に実現できますね.
S2Daoだけですと,Daoに対応するメソッドなりSQLファイルを定義しないといけませんが,ConditionBeanであればそのような煩雑さはなさそうですね.
final LdBookCB cb = new LdBookCB(); cb.query().setBookName_PrefixSearch("S2Dao");// ☆Point - '%'は内部で自動的に付与される cb.query().setGenreCode_IsNotNull();// ☆Point final java.util.List<LdBook> ls = bhv.selectList(cb);
DBFluteを使えば,Behavior, ConditionBean, Entityを使い,DaoをBehavior経由で使うことになる模様.
ConditionBeanの使い方だけさらっと読んでおけば実用的には問題なさそう.
Seasar2.5では,S2Dao+DBFluteが統合されたS2Persistenceが登場するみたいですね.
http://s2container.seasar.org/ja/seasar2.5.pdf
ま,しかし,クラスの登場人物が多くなると管理コストがまた大変なので,できるだけ減らせるようにできるとよいかもしれません.