JdbcManagerのselectBySqlFileメソッドにおいて、Dto以外にもバインド変数をMapで渡せると便利になるかと思います。詳細な型指定は難しいですが、実際の開発現場ではMapで範囲でも十分な場合も多い気がします。
パッチありがとうございます.対応しました. http://svn.seasar.org/browse/?view=rev&root=s2container&revision=4224
パッチの添付が見つからなかったので、以下に記述しました。検討をよろしくお願いいたします。
Index: src/main/java/org/seasar/extension/jdbc/query/SqlFileSelectImpl.java =================================================================== --- . (revision 4218) +++ . (working copy) @@ -15,6 +15,10 @@ */ package org.seasar.extension.jdbc.query; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; + import org.seasar.extension.jdbc.SqlFileSelect; import org.seasar.extension.jdbc.manager.JdbcManagerImplementor; import org.seasar.extension.jdbc.parameter.LobParameter; @@ -135,6 +139,7 @@ /** * パラメータを準備します。 */ + @SuppressWarnings("unchecked") protected void prepareParameter() { sqlContext = new SqlContextImpl(); if (parameter != null) { @@ -143,6 +148,26 @@ || TemporalParameter.class == clazz || LobParameter.class == clazz) { sqlContext.addArg("$1", parameter, clazz); + } else if (parameter instanceof Map) { + Map<Object, Object> paramMap = (Map<Object, Object>) parameter; + Set<Entry<Object, Object>> entrySet = paramMap.entrySet(); + for (Map.Entry<Object, Object> entry : entrySet) { + Object value = entry.getValue(); + Object key = entry.getKey(); + if (key == null || !(key instanceof CharSequence)) { + continue; + } + String name = ((CharSequence) key).toString(); + if (name.equals("limit")) { + limit = IntegerConversionUtil.toPrimitiveInt(value); + } else if (name.equals("offset")) { + offset = IntegerConversionUtil.toPrimitiveInt(value); + } else { + sqlContext.addArg(name, value, + (value == null ? String.class : value + .getClass())); + } + } } else { BeanDesc beanDesc = BeanDescFactory.getBeanDesc(clazz); for (int i = 0; i < beanDesc.getPropertyDescSize(); i++) {
パッチありがとうございます.対応しました.
http://svn.seasar.org/browse/?view=rev&root=s2container&revision=4224