かとじゅんの技術日誌

技術の話をするところ

DBFulteの環境作り

最近,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
ま,しかし,クラスの登場人物が多くなると管理コストがまた大変なので,できるだけ減らせるようにできるとよいかもしれません.