• Type: Improvement
    • Resolution: Fixed
    • Priority: Major
    • 2.4.34
    • Affects Version/s: 2.4.33
    • Component/s: S2JDBC
    • None

      JdbcManagerのselectBySqlFileメソッドにおいて、Dto以外にもバインド変数をMapで渡せると便利になるかと思います。詳細な型指定は難しいですが、実際の開発現場ではMapで範囲でも十分な場合も多い気がします。

          [CONTAINER-338] [S2JDBC] JdbcManager#selectBySqlFile() メソッドで複数のバインド変数を指定する場合に Map を使えるようにしました.

          koichik added a comment -

          パッチありがとうございます.対応しました.
          http://svn.seasar.org/browse/?view=rev&root=s2container&revision=4224

          koichik added a comment - パッチありがとうございます.対応しました. http://svn.seasar.org/browse/?view=rev&root=s2container&revision=4224

          shinsuke added a comment -

          パッチの添付が見つからなかったので、以下に記述しました。検討をよろしくお願いいたします。

           
          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++) {
          

          shinsuke added a comment - パッチの添付が見つからなかったので、以下に記述しました。検討をよろしくお願いいたします。 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++) {

            Assignee:
            koichik
            Reporter:
            shinsuke
            Votes:
            0 Vote for this issue
            Watchers:
            Start watching this issue

              Created:
              Updated:
              Resolved: