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

Status: Resolved
Project: S2Container
Component/s: S2JDBC
Affects Version/s: 2.4.33
Fix Version/s: 2.4.34

Type: Improvement Priority: Major
Reporter: shinsuke Assignee: koichik
Resolution: Fixed Votes: 0
Labels: None


 Description   

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



 Comments   
Comment by koichik [ 2009-01-26 ]

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

Comment by shinsuke [ 2009-01-23 ]

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

 
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++) {
Generated at Wed Apr 24 06:14:46 JST 2024 using Jira 9.15.0#9150000-sha1:9ead8528714127d8cfabf2446010d7e62c0a195c.