[Seasar-user:3581] Re: S2Dao のSQLコメントについて
suga
[E-MAIL ADDRESS DELETED]
2006年 5月 2日 (火) 08:50:40 JST
suga です。
On 5/2/06, Momotaro Nishiumi <[E-MAIL ADDRESS DELETED]> wrote:
> > /*IF dto.field1 != null*/field1 = /*dto.field1*/'001' /*END*/
> > /*IF dto.field2 != null*/AND field2 = /*dto.field2*/'001' /*END*/
> > /*IF dto.field3From != null*/AND field3 >= /*dto.field3From*/1/*END*/
> > /*IF dto.field3To != null*/AND field3 <= /*dto.field3To*/1/*END*/
> これだと、dto.field1がnullだった場合にSQLエラーになってしまいます。
field1が、というよりも、全部の条件がない場合に "WHERE" だけに
なってしまうということですね。
QUERY アノテーションに /*BEGIN*/WHERE を書けるようにするのは
いかがでしょうか >S2Dao コミッタの方々
/*BEGIN*/ に空白を含められたかどうかわかりませんが、
ORDER BY と同様に "QUERY アノテーションの先頭に" という
条件であれば、簡単な実装として下記で動作します。
------------------------
org.seasar.dao.impl.DaoMetaDataImpl
protected SelectDynamicCommand createSelectDynamicCommand(
ResultSetHandler resultSetHandler, String query) {
SelectDynamicCommand cmd = createSelectDynamicCommand(resultSetHandler);
StringBuffer buf = new StringBuffer(255);
if (startsWithSelect(query)) {
buf.append(query);
} else {
String sql = dbms_.getAutoSelectSql(getBeanMetaData());
buf.append(sql);
if (query != null) {
if (startsWithOrderBy(query)) {
buf.append(" ");
// ここから
} else if (query.matches("(/\\*BEGIN\\*/)?WHERE .+")) {
buf.append(" ");
// ここまで追加
} else if (sql.lastIndexOf("WHERE") < 0) {
buf.append(" WHERE ");
} else {
buf.append(" AND ");
}
buf.append(query);
}
}
cmd.setSql(buf.toString());
return cmd;
}
--------------------------------
--
suga ( [E-MAIL ADDRESS DELETED] )
Seasar-user メーリングリストの案内