DBFlute: 外だしSQLでもLikeSearchOption!


ユーザ様からのフィードバックで、「外だしSQLでもLikeSearchOption」を実装しました。
(本当にありがとうございます)


[以前]
ConditionBeanで利用するLikeSearchOptionは、非常に便利なものでしたが、
外だしSQLとなると、そのOptionの威力を発揮することができないため、結局自分で
どうにかしなければなりませんでした。(もしくはLikeSearchOptionをユーティリティ的に使う)


[今後]
外だしSQLでもLikeSearchOptionを利用して、簡単にLikeSearchします。

# ex) ParameterBeanでmemberNameをlikeSearchと指定 ※「:like」がポイント
#
# -- !OptionMemberPmb!
# -- !!Integer memberId!!
# -- !!String memberName:like!!
#

# ex) プログラムにおいてLikeSearchOptionの指定{一致の方向&エスケープの有無}
#
# final OptionMemberPmb pmb = new OptionMemberPmb();
# pmb.setMemberName("ストイコ100%ビッチ_その", new LikeSearchOption().likePrefix().escapeByPipeLine());
# ...
# final List resultList = memberBhv.outsideSql().selectList(path, pmb, entityType);
#

# ex) SQLにおける条件設定 ※今までのように「'ス' || '%'」としてないところがポイント
#
# /*IF pmb.memberName != null*/and member.MEMBER_NAME like /*pmb.memberName*/'ス%'/*END*/
#

# ex) 発行されるSQLの条件
# where
# member.MEMBER_NAME like 'ストイコ100|%ビッチ|_その%' escape '|'
#

これはさらに、「前方一致や中間一致を画面で指定するプログラム上は動的に切り替わるような検索画面」
の場合に活きます。その入力された区分値からlikePrefix()/likeContain()を切り替えればいいだけです。
SQL上で「'ス' || '%'」と固定で書いてしまってはそれができない)

BasicExampleのMemberBhvTest#test_outsideSql_selectOptionMember_LikeSearchOption_Tx()にて
サンプルを実装していますので、利用される方はぜひご覧になられて下さい。
(OracleExampleでも全く同じのを実装しています)

// BasicExampleのSVNリポジトリURL
https://www.seasar.org/svn/sandbox/dbflute/trunk/dbflute-basic-example

// OracleExampleのSVNリポジトリURL
https://www.seasar.org/svn/sandbox/dbflute/trunk/dbflute-oracle-example


[補足]
特にエスケープをしない固定の曖昧検索であれば、上記の機能を無理に使う必要はありません。
今まで通りSQL上で「/*pmb.memberName*/'ス' || '%'」と固定でワイルドカードを付与する形で問題ありません。
また、その場合はParameterBeanにて「:like」を付与する必要もありません。

【追記: 2009/03/18】
DBFlute-0.9.4より一致の方向を指定した時点で
自動でエスケープ処理が施されます。
(likePrefix()とかlikeContain()とか呼び出したら自動でエスケープ)
ほとんどの場合において、escapeByXxx()を明示的に呼ぶ必要はありません。