Behaviorの使い方
Behaviorインスタンスの取得
Behaviorは、DIコンテナ上の(シングルトン)コンポーネントとして管理されていますので、Behaviorインスタンスは DIコンテナから取得 します。 アプリで明示的にインスタンスを生成することは、(テストでモックを作るとか以外には)基本的にありません。
DIの仕方は、DIコンテナに依存しますので、利用されているDIコンテナのページをご覧下さい。
BehaviorSelectorの利用
もう一つ、Behaviorインスタンスを取得する方法として BehaviorSelector があります。同じくDIコンテナで管理されているコンポーネントで、Behaviorインスタンスを型で取得するメソッドや、テーブル名から取得するメソッドが利用できます。
通常は、あまり利用する必要はありませんが、BehaviorSelectorインスタンス一つで、全ての Behavior のインスタンスを取得できるため、一つのクラスであまりにも多くのBehaviorを必要とするような場合や(プロパティ定義だらけ)、 DI管理でないクラスに渡してBehaviorを利用してもらう場合などに利用できます。また、BehaviorSelectorはインターフェースなので、 型による自動インジェクションが効かないDIコンテナにおいて、プロパティ名(の間違いなど)を意識せずにBehaviorインスタンスを取得する方法としても利用できます。
実装手順
インスタンスを取得したら、後はそれぞれのメソッドを呼び出して使うのみです。 ConditionBeanによる検索や、登録・更新・削除、外だしSQLの実行など、全てのDBアクセスはBehaviorを経由します。 それぞれのメソッド仕様を確認して利用するようにして下さい。
基本仕様
- マルチスレッド対応
- (DIコンテナ上のコンポーネントとして扱っている限り)スレッドセーフです。
- ライフサイクル
- DIコンテナ上のシングルトンコンポーネントなので、DIコンテナのライフサイクルと同じです。
コード補完を駆使して実装
Behaviorのメソッドをコード補完を使って呼び出しましょう。 メソッド名を一字一句丁寧に打ち込むというようなことはやらずに、メソッドの先頭の文字を打ち込んでメソッド候補を補完 して、利用したいメソッドを選んで実装していくようにします。ここでは Eclipse を基本として説明します。
先頭文字を覚えておくのが大事
Behaviorには多くの内部メソッドも存在しますが、publicメソッドの先頭文字に関しては、コード補完の検索ノイズにならないように注意して設定されています。 先頭文字さえ覚えておけば、あとはディベロッパーに必要なBehaviorのメソッドだけでの補完になるため、とても探しやすくなります。
- 検索
- s (S) (selectEntity(), selectList(), ...)
- LoadReferrer
- l (L) (load...())
- 一件登録
- i (I) (insert(), insertOrUpdate(), ...)
- 一件更新
- u (U) (update(), updateNonstrict())
- 一件削除
- d (D) (delete(), deleteNonstrict(), ...)
- バッチ更新(系)
- b (B) (batchInsert(), batchUpdate(), ...)
- クエリ更新(系)
- q (Q) (queryUpdate(), queryDelete())
キャメルケースコード補完
ConditionBeanのページで紹介しているキャメルケースコード補完がこちらでも応用できます。
例えば、selectList() であれば、.sL とだけ打って enter すれば、補完できます。(左手で s を打った後にShiftを押すのをリズムが悪く感じるのであれば、selL でも良いでしょう。)
e.g. Eclipseでのショートカット (キャメルケースコード補完) @Java
memberBhv.sL // ".sL" とだけ打って enter
to
memberBhv.selectList(cb); // 変数(名)の選択状態になる (最後にセミコロン)
戻り値の抽出
特に Behavior では戻り値を意識するメソッドが多いですが、その戻り値の型をいちいち覚えて律儀に書くのではなく、 先に処理を呼び出してから、戻り値を魔法のように呼び出しましょう。戻り値の型を覚えてなくても実装ができるようになります。
e.g. Eclipseでのショートカット (戻り値の抽出) @Java
memberBhv.selectList(cb); // セミコロンの右側にカーソル置いて(ctrl(or command) + 2 and L)
to
ListResultBean<Member> memberList = memberBhv.selectList(cb); // 変数(名)の選択状態になる
次の行へ行く
変数名も調整して、さあ次の行に行って続きの処理を実装したいと思ったときに、そのまま enter すると、今度は戻り値の型の調整のためにカーソルが別のところへ行って、何度 enter を押せば良いのかわからなくなったり(連打して改行し過ぎてしまったり)、 調整モードから抜けた状態でつい enter すると、カーソルのある場所から改行されてしまい、モチベーションが下がってしまいます。
そこで、shift + enter。(前の行での)カーソルの場所に関わらず、次の行に改行してくれます。
e.g. Eclipseでのショートカット (次の行へ行く) @Java
List<Member> memberList = member...; // この行のどこにいても shift + enter
to
List<Member> memberList = member...;
// もう、あなたはこの行に (かつ、新たな行が作成される)
一気にfor文を
リスト系の戻り値を扱う場合において、for文はこのままの勢いで補完してしまいましょう。
fore とまで打って、ctrl + space、そして、その瞬間 enter。
e.g. Eclipseでのショートカット (一気にfor文を) @Java
List<Member> memberList = member...;
fore // この行にいる状態で、"fore" と打って、ctrl + space、そして、その瞬間 enter!
to
List<Member> memberList = member...;
for (Member member : memberList) { // 変数名もOKなら、すぐに shift + enter!
}
実装中のクラスで、"fore" で始まるクラスやメソッドが補完対象になっていると、それだけではユニークになりません(知らずに enter すると、補完候補の一番上のクラスが補完されるだけで一瞬頭が真っ白になります)。その時は、驚かずに "forea" くらいまで書くと良いでしょう。(DBFlute内部のプログラミングでは、ForeignInfo というクラスを利用していると危険な目に合うことがあります)