Author: cbegin
Date: Tue May 12 05:42:36 2009
New Revision: 773792

URL: http://svn.apache.org/viewvc?rev=773792&view=rev
Log:
Implemented Generated Key Support

Added:
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/SqlCommandType.java
      - copied, changed from r773352, 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethodType.java
Removed:
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethodType.java
Modified:
    ibatis/trunk/java/ibatis-3/TODO
    
ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/Ibatis2Configuration.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/XmlSqlStatementParser.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SequentialMapperBuilder.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationParser.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLMapperConfigParser.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLStatementParser.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/ibatis-3-mapper.dtd
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BatchExecutor.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/statement/BaseStatementHandler.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/statement/PreparedStatementHandler.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/statement/SimpleStatementHandler.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/Configuration.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/MappedStatement.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSession.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MapperConfig.xml
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/BaseExecutorTest.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/ExecutorTestHelper.java
    ibatis/trunk/java/ibatis-3/version.properties

Modified: ibatis/trunk/java/ibatis-3/TODO
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/TODO?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/TODO (original)
+++ ibatis/trunk/java/ibatis-3/TODO Tue May 12 05:42:36 2009
@@ -4,12 +4,13 @@
 
 Required:
 
-* Return selectKey or autogen key from session.insert()
+* Apply selectKey to parameterObject
 
 Nice to Have:
-
+* Commit required option at statement level
 * Add resultType automapping option for collections so a resultMap isn' t 
required
 * Auto result/param types detected for bound XML statements
 * Named parameter parsing/merging
 * commitRequired option at the statement level
 * Wrap collection parameter objects in a map automatically
+* Allow lazy loading across connection boundaries
\ No newline at end of file

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/Ibatis2Configuration.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/Ibatis2Configuration.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/Ibatis2Configuration.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/Ibatis2Configuration.java
 Tue May 12 05:42:36 2009
@@ -28,7 +28,7 @@
   private Map<String, Boolean> postSelectKeyMap;
 
   public Ibatis2Configuration() {
-    setGeneratedKeysEnabled(false);
+    setUseGeneratedKeys(false);
     this.flushCachePlugin = new FlushCacheInterceptor();
     this.addInterceptor(flushCachePlugin);
     this.postSelectKeyMap = new HashMap<String, Boolean>();

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/XmlSqlStatementParser.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/XmlSqlStatementParser.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/XmlSqlStatementParser.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-compat/src/main/java/com/ibatis/sqlmap/engine/builder/XmlSqlStatementParser.java
 Tue May 12 05:42:36 2009
@@ -77,8 +77,16 @@
 
     SqlSource sqlSource = new 
SqlSourceFactory(mapParser).newSqlSourceIntance(mapParser, context);
 
+    String nodeName = context.getNode().getNodeName();
+    SqlCommandType sqlCommandType;
+    try {
+      sqlCommandType = SqlCommandType.valueOf(nodeName.toUpperCase());
+    } catch (Exception e) {
+      sqlCommandType = SqlCommandType.UNKNOWN; 
+    }
+
 
-    MappedStatement.Builder builder = new 
MappedStatement.Builder(configuration, id, sqlSource);
+    MappedStatement.Builder builder = new 
MappedStatement.Builder(configuration, id, sqlSource,sqlCommandType);
 
     builder.useCache(true);
     if (!"select".equals(context.getNode().getNodeName())) {
@@ -213,7 +221,7 @@
     ArrayList<ResultMap> resultMapList = new ArrayList<ResultMap>();
     resultMapList.add(resultMapBuilder.build());
 
-    MappedStatement.Builder builder = new 
MappedStatement.Builder(configuration, keyStatementId, source);
+    MappedStatement.Builder builder = new 
MappedStatement.Builder(configuration, keyStatementId, source, 
SqlCommandType.SELECT);
     builder.resultMaps(resultMapList);
 
     configuration.setPostSelectKey(keyStatementId, runStatementFirst);

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java
 Tue May 12 05:42:36 2009
@@ -167,6 +167,10 @@
     int fetchSize() default -1;
 
     int timeout() default -1;
+
+    boolean useGeneratedKeys() default false;
+
+    String keyProperty() default "id";
   }
 
   @Retention(RetentionPolicy.RUNTIME)

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java
 Tue May 12 05:42:36 2009
@@ -1,7 +1,7 @@
 package org.apache.ibatis.binding;
 
 import org.apache.ibatis.executor.Executor;
-import org.apache.ibatis.mapping.Configuration;
+import org.apache.ibatis.mapping.*;
 import org.apache.ibatis.session.SqlSession;
 
 import java.lang.reflect.Method;
@@ -13,7 +13,7 @@
   private SqlSession sqlSession;
   private Configuration config;
 
-  private MapperMethodType type;
+  private SqlCommandType type;
   private String commandName;
 
   private Method method;
@@ -36,16 +36,16 @@
 
   public Object execute(Object[] args) throws SQLException {
     Object result;
-    if (MapperMethodType.INSERT == type) {
+    if (SqlCommandType.INSERT == type) {
       Object param = getParam(args);
       result = sqlSession.insert(commandName, param);
-    } else if (MapperMethodType.UPDATE == type) {
+    } else if (SqlCommandType.UPDATE == type) {
       Object param = getParam(args);
       result = sqlSession.update(commandName, param);
-    } else if (MapperMethodType.DELETE == type) {
+    } else if (SqlCommandType.DELETE == type) {
       Object param = getParam(args);
       result = sqlSession.delete(commandName, param);
-    } else if (MapperMethodType.SELECT == type) {
+    } else if (SqlCommandType.SELECT == type) {
       if (returnsList) {
         result = executeForList(args);
       } else {
@@ -78,13 +78,13 @@
   private void determineCommandType() {
     String methodName = method.getName();
     if (methodName.startsWith("insert") || methodName.startsWith("create")) {
-      type = MapperMethodType.INSERT;
+      type = SqlCommandType.INSERT;
     } else if (methodName.startsWith("update") || 
methodName.startsWith("save")) {
-      type = MapperMethodType.UPDATE;
+      type = SqlCommandType.UPDATE;
     } else if (methodName.startsWith("delete") || 
methodName.startsWith("remove")) {
-      type = MapperMethodType.DELETE;
+      type = SqlCommandType.DELETE;
     } else if (methodName.startsWith("select") || 
methodName.startsWith("find")) {
-      type = MapperMethodType.SELECT;
+      type = SqlCommandType.SELECT;
     } else {
       throw new BindingException("Unkown execution method for: " + 
commandName);
     }

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SequentialMapperBuilder.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SequentialMapperBuilder.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SequentialMapperBuilder.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SequentialMapperBuilder.java
 Tue May 12 05:42:36 2009
@@ -210,13 +210,18 @@
       boolean isSelect,
       boolean flushCache,
       boolean useCache,
-      StatementType statementType) {
+      StatementType statementType,
+      SqlCommandType sqlCommandType,
+      boolean useGeneratedKeys,
+      String keyProperty) {
     id = applyNamespace(id);
 
-    MappedStatement.Builder statementBuilder = new 
MappedStatement.Builder(configuration, id, sqlSource);
+    MappedStatement.Builder statementBuilder = new 
MappedStatement.Builder(configuration, id, sqlSource, sqlCommandType);
     statementBuilder.resource(resource);
     statementBuilder.fetchSize(fetchSize);
     statementBuilder.statementType(statementType);
+    statementBuilder.useGeneratedKeys(useGeneratedKeys);
+    statementBuilder.keyProperty(keyProperty);
     setStatementTimeout(timeout, statementBuilder);
 
     setStatementParameterMap(parameterMap, parameterType, statementBuilder);

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationParser.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationParser.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationParser.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationParser.java
 Tue May 12 05:42:36 2009
@@ -164,6 +164,7 @@
   }
 
   private void parseStatement(Method method) {
+    Configuration configuration = sequentialBuilder.getConfiguration();
     SqlSource sqlSource = getSqlSourceFromAnnotations(method);
     if (sqlSource != null) {
       Options options = method.getAnnotation(Options.class);
@@ -175,6 +176,9 @@
       Integer timeout = null;
       StatementType statementType = StatementType.PREPARED;
       ResultSetType resultSetType = ResultSetType.FORWARD_ONLY;
+      SqlCommandType sqlCommandType = getSqlCommandType(method);
+      boolean useGeneratedKeys = configuration.isUseGeneratedKeys() && 
SqlCommandType.INSERT.equals(sqlCommandType);
+      String keyProperty = "id";
       if (options != null) {
         flushCache = options.flushCache();
         useCache = options.useCache();
@@ -182,6 +186,8 @@
         timeout = options.timeout() > -1 ? options.timeout() : null;
         statementType = options.statementType();
         resultSetType = options.resultSetType();
+        useGeneratedKeys = options.useGeneratedKeys();
+        keyProperty = options.keyProperty();
       }
       sequentialBuilder.statement(
           mappedStatementId,
@@ -196,7 +202,10 @@
           isSelect,                  // IsSelectStatement
           flushCache,
           useCache,
-          statementType);
+          statementType,
+          sqlCommandType,
+          useGeneratedKeys,
+          keyProperty);
     }
   }
 
@@ -255,6 +264,15 @@
     }
   }
 
+  private SqlCommandType getSqlCommandType(Method method) {
+    Class[] types = {Select.class, Insert.class, Update.class, Delete.class};
+    Class type = chooseAnnotationType(method, types);
+    if (type != null) {
+      return SqlCommandType.valueOf(type.getSimpleName().toUpperCase());
+    }
+    return SqlCommandType.UNKNOWN;
+  }
+
   private Class getSqlAnnotationType(Method method) {
     Class[] types = {Select.class, Insert.class, Update.class, Delete.class};
     return chooseAnnotationType(method, types);

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLMapperConfigParser.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLMapperConfigParser.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLMapperConfigParser.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLMapperConfigParser.java
 Tue May 12 05:42:36 2009
@@ -134,7 +134,7 @@
     
configuration.setMultipleResultSetsEnabled(booleanValueOf(props.getProperty("multipleResultSetsEnabled"),
 true));
     
configuration.setUseColumnLabel(booleanValueOf(props.getProperty("useColumnLabel"),
 true));
     
configuration.setEnhancementEnabled(booleanValueOf(props.getProperty("enhancementEnabled"),
 false));
-    
configuration.setGeneratedKeysEnabled(booleanValueOf(props.getProperty("generatedKeysEnabled"),
 false));
+    
configuration.setUseGeneratedKeys(booleanValueOf(props.getProperty("useGeneratedKeys"),
 false));
     
configuration.setDefaultExecutorType(ExecutorType.valueOf(stringValueOf(props.getProperty("defaultExecutorType"),
 "SIMPLE")));
     
configuration.setDefaultStatementTimeout(integerValueOf(props.getProperty("defaultStatementTimeout"),
 null));
   }

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLStatementParser.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLStatementParser.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLStatementParser.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/XMLStatementParser.java
 Tue May 12 05:42:36 2009
@@ -1,9 +1,6 @@
 package org.apache.ibatis.builder.xml;
 
-import org.apache.ibatis.mapping.Configuration;
-import org.apache.ibatis.mapping.ResultSetType;
-import org.apache.ibatis.mapping.SqlSource;
-import org.apache.ibatis.mapping.StatementType;
+import org.apache.ibatis.mapping.*;
 import org.apache.ibatis.builder.BaseParser;
 import org.apache.ibatis.builder.ParserException;
 import org.apache.ibatis.builder.SequentialMapperBuilder;
@@ -41,6 +38,7 @@
     Class parameterTypeClass = resolveClass(parameterType);
     String resultMap = context.getStringAttribute("resultMap");
     String resultType = context.getStringAttribute("resultType");
+
     Class resultTypeClass = resolveClass(resultType);
     String resultSetType = context.getStringAttribute("resultSetType");
     StatementType statementType = 
StatementType.valueOf(context.getStringAttribute("statementType", 
StatementType.PREPARED.toString()));
@@ -49,9 +47,15 @@
     List<SqlNode> contents = parseDynamicTags(context);
     MixedSqlNode rootSqlNode = new MixedSqlNode(contents);
     SqlSource sqlSource = new DynamicSqlSource(configuration, rootSqlNode);
+    String nodeName = context.getNode().getNodeName();
+    SqlCommandType sqlCommandType = 
SqlCommandType.valueOf(nodeName.toUpperCase());
+
+    String keyProperty = context.getStringAttribute("keyProperty");
+    boolean useGeneratedKeys = context.getBooleanAttribute("useGeneratedKeys",
+        configuration.isUseGeneratedKeys() && 
SqlCommandType.INSERT.equals(sqlCommandType));
 
     sequentialBuilder.statement(id, sqlSource, fetchSize, timeout, 
parameterMap, parameterTypeClass,
-        resultMap, resultTypeClass, resultSetTypeEnum, isSelect, flushCache, 
useCache, statementType);
+        resultMap, resultTypeClass, resultSetTypeEnum, isSelect, flushCache, 
useCache, statementType, sqlCommandType,useGeneratedKeys,keyProperty);
   }
 
 

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/ibatis-3-mapper.dtd
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/ibatis-3-mapper.dtd?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/ibatis-3-mapper.dtd
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/ibatis-3-mapper.dtd
 Tue May 12 05:42:36 2009
@@ -151,6 +151,8 @@
 timeout CDATA #IMPLIED
 flushCache (true|false) #IMPLIED
 statementType (STATEMENT|PREPARED|CALLABLE) #IMPLIED
+keyProperty CDATA #IMPLIED
+useGeneratedKeys (true|false) #IMPLIED
 >
 
 <!ELEMENT selectKey (#PCDATA | include | prefix | where | set | foreach | 
choose | if)*>

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BatchExecutor.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BatchExecutor.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BatchExecutor.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BatchExecutor.java
 Tue May 12 05:42:36 2009
@@ -4,6 +4,8 @@
 import org.apache.ibatis.executor.statement.StatementHandler;
 import org.apache.ibatis.mapping.*;
 import org.apache.ibatis.transaction.Transaction;
+import org.apache.ibatis.reflection.MetaObject;
+import org.apache.ibatis.type.*;
 
 import java.sql.*;
 import java.util.*;
@@ -61,6 +63,7 @@
         BatchResult batchResult = batchResultList.get(i);
         try {
           batchResult.setUpdateCounts(stmt.executeBatch());
+          processBatchGeneratedKeys(batchResult, stmt);
         } catch (BatchUpdateException e) {
           StringBuffer message = new StringBuffer();
           message.append(batchResult.getMappedStatement().getId())
@@ -88,6 +91,42 @@
     }
   }
 
+  protected void processBatchGeneratedKeys(BatchResult batchResult, Statement 
stmt) throws SQLException {
+    MappedStatement ms = batchResult.getMappedStatement();
+    Configuration configuration = ms.getConfiguration();
+    TypeHandlerRegistry typeHandlerRegistry = 
configuration.getTypeHandlerRegistry();
+    Object parameter = batchResult.getParameterObject();
+    if (parameter != null && ms.isUseGeneratedKeys()) {
+      String keyProperty = ms.getKeyProperty();
+      final MetaObject metaParam = MetaObject.forObject(parameter);
+      if (keyProperty != null && metaParam.hasSetter(keyProperty)) {
+        Class keyPropertyType = metaParam.getSetterType(keyProperty);
+        TypeHandler th =  typeHandlerRegistry.getTypeHandler(keyPropertyType);
+        if (th != null) {
+          ResultSet rs = stmt.getGeneratedKeys();
+          try {
+            ResultSetMetaData rsmd = rs.getMetaData();
+            int colCount = rsmd.getColumnCount();
+            if (colCount > 0) {
+              String colName = rsmd.getColumnName(1);
+              while (rs.next()) {
+                Object value = th.getResult(rs,colName);
+                metaParam.setValue(keyProperty,value);
+              }
+            }
+          } finally {
+            try {
+              if (rs != null) rs.close();
+            } catch (Exception e) {
+              //ignore
+            }
+          }
+        }
+      }
+    }
+  }
+
+
 }
 
 

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/statement/BaseStatementHandler.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/statement/BaseStatementHandler.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/statement/BaseStatementHandler.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/statement/BaseStatementHandler.java
 Tue May 12 05:42:36 2009
@@ -5,8 +5,8 @@
 import org.apache.ibatis.executor.result.ResultHandler;
 import org.apache.ibatis.executor.resultset.ResultSetHandler;
 import org.apache.ibatis.mapping.*;
-import org.apache.ibatis.reflection.ObjectFactory;
-import org.apache.ibatis.type.TypeHandlerRegistry;
+import org.apache.ibatis.reflection.*;
+import org.apache.ibatis.type.*;
 
 import java.sql.*;
 
@@ -70,25 +70,35 @@
       throws SQLException;
 
 
-  protected Integer processGeneratedKeys(MappedStatement ms, Statement stmt, 
Object parameter) throws SQLException {
-    if (ms.getConfiguration().isGeneratedKeysEnabled()) {
-      ResultSet rs = stmt.getGeneratedKeys();
-      try {
-        while (rs.next()) {
-          Object object = rs.getObject(1);
-          if (object != null) {
-            return Integer.parseInt(object.toString());
+  protected void processGeneratedKeys(MappedStatement ms, Statement stmt, 
Object parameter) throws SQLException {
+    if (parameter != null && ms.isUseGeneratedKeys()) {
+      String keyProperty = ms.getKeyProperty();
+      final MetaObject metaParam = MetaObject.forObject(parameter);
+      if (keyProperty != null && metaParam.hasSetter(keyProperty)) {
+        Class keyPropertyType = metaParam.getSetterType(keyProperty);
+        TypeHandler th = typeHandlerRegistry.getTypeHandler(keyPropertyType);
+        if (th != null) {
+          ResultSet rs = stmt.getGeneratedKeys();
+          try {
+            ResultSetMetaData rsmd = rs.getMetaData();
+            int colCount = rsmd.getColumnCount();
+            if (colCount > 0) {
+              String colName = rsmd.getColumnName(1);
+              while (rs.next()) {
+                Object value = th.getResult(rs,colName);
+                metaParam.setValue(keyProperty,value);
+              }
+            }
+          } finally {
+            try {
+              if (rs != null) rs.close();
+            } catch (Exception e) {
+              //ignore
+            }
           }
         }
-      } finally {
-        try {
-          if (rs != null) rs.close();
-        } catch (Exception e) {
-          //ignore
-        }
       }
     }
-    return null;
   }
 
   protected void setStatementTimeout(Statement stmt)

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/statement/PreparedStatementHandler.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/statement/PreparedStatementHandler.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/statement/PreparedStatementHandler.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/statement/PreparedStatementHandler.java
 Tue May 12 05:42:36 2009
@@ -18,10 +18,8 @@
     PreparedStatement ps = (PreparedStatement) statement;
     ps.execute();
     int result = ps.getUpdateCount();
-    if (mappedStatement.getConfiguration().isGeneratedKeysEnabled()) {
-      Object parameterObject = boundSql.getParameterObject();
-      result = processGeneratedKeys(mappedStatement, ps, parameterObject);
-    }
+    Object parameterObject = boundSql.getParameterObject();
+    processGeneratedKeys(mappedStatement, ps, parameterObject);
     return result;
   }
 
@@ -40,7 +38,7 @@
 
   protected Statement instantiateStatement(Connection connection) throws 
SQLException {
     String sql = boundSql.getSql();
-    if (mappedStatement.getConfiguration().isGeneratedKeysEnabled()) {
+    if (mappedStatement.isUseGeneratedKeys()) {
       return connection.prepareStatement(sql, 
PreparedStatement.RETURN_GENERATED_KEYS);
     } else if (mappedStatement.getResultSetType() != null) {
       return connection.prepareStatement(sql, 
mappedStatement.getResultSetType().getValue(), ResultSet.CONCUR_READ_ONLY);

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/statement/SimpleStatementHandler.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/statement/SimpleStatementHandler.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/statement/SimpleStatementHandler.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/statement/SimpleStatementHandler.java
 Tue May 12 05:42:36 2009
@@ -2,7 +2,7 @@
 
 import org.apache.ibatis.executor.Executor;
 import org.apache.ibatis.executor.result.ResultHandler;
-import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.*;
 
 import java.sql.*;
 import java.util.List;
@@ -17,15 +17,13 @@
       throws SQLException {
     String sql = boundSql.getSql();
     Object parameterObject = boundSql.getParameterObject();
-    if (mappedStatement.getConfiguration().isGeneratedKeysEnabled()) {
+    if (mappedStatement.isUseGeneratedKeys()) {
       statement.execute(sql, Statement.RETURN_GENERATED_KEYS);
     } else {
       statement.execute(sql);
     }
     int result = statement.getUpdateCount();
-    if (mappedStatement.getConfiguration().isGeneratedKeysEnabled()) {
-      result = processGeneratedKeys(mappedStatement, statement, 
parameterObject);
-    }
+    processGeneratedKeys(mappedStatement, statement, parameterObject);
     return result;
   }
 

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/Configuration.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/Configuration.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/Configuration.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/Configuration.java
 Tue May 12 05:42:36 2009
@@ -29,7 +29,7 @@
   private boolean lazyLoadingEnabled = true;
   private boolean enhancementEnabled = false;
   private boolean multipleResultSetsEnabled = true;
-  private boolean generatedKeysEnabled = false;
+  private boolean useGeneratedKeys = false;
   private boolean useColumnLabel = true;
   private boolean cacheEnabled = true;
   private Integer defaultStatementTimeout;
@@ -98,12 +98,12 @@
     this.multipleResultSetsEnabled = multipleResultSetsEnabled;
   }
 
-  public boolean isGeneratedKeysEnabled() {
-    return generatedKeysEnabled;
+  public boolean isUseGeneratedKeys() {
+    return useGeneratedKeys;
   }
 
-  public void setGeneratedKeysEnabled(boolean generatedKeysEnabled) {
-    this.generatedKeysEnabled = generatedKeysEnabled;
+  public void setUseGeneratedKeys(boolean useGeneratedKeys) {
+    this.useGeneratedKeys = useGeneratedKeys;
   }
 
   public ExecutorType getDefaultExecutorType() {

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/MappedStatement.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/MappedStatement.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/MappedStatement.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/MappedStatement.java
 Tue May 12 05:42:36 2009
@@ -19,6 +19,9 @@
   private List<ResultMap> resultMaps;
   private boolean flushCacheRequired;
   private boolean useCache;
+  private SqlCommandType sqlCommandType;
+  private boolean useGeneratedKeys;
+  private String keyProperty;
 
   private MappedStatement() {
   }
@@ -26,7 +29,7 @@
   public static class Builder {
     private MappedStatement mappedStatement = new MappedStatement();
 
-    public Builder(Configuration configuration, String id, SqlSource 
sqlSource) {
+    public Builder(Configuration configuration, String id, SqlSource 
sqlSource, SqlCommandType sqlCommandType) {
       mappedStatement.configuration = configuration;
       mappedStatement.id = id;
       mappedStatement.sqlSource = sqlSource;
@@ -34,6 +37,9 @@
       mappedStatement.parameterMap = new ParameterMap.Builder(configuration, 
"defaultParameterMap", Object.class, new ArrayList<ParameterMapping>()).build();
       mappedStatement.resultMaps = new ArrayList<ResultMap>();
       mappedStatement.timeout = configuration.getDefaultStatementTimeout();
+      mappedStatement.sqlCommandType = sqlCommandType;
+      mappedStatement.useGeneratedKeys = configuration.isUseGeneratedKeys()
+          && SqlCommandType.INSERT.equals(sqlCommandType);
     }
 
     public Builder resource(String resource) {
@@ -90,6 +96,16 @@
       return this;
     }
 
+    public Builder useGeneratedKeys(boolean useGeneratedKeys) {
+      mappedStatement.useGeneratedKeys = useGeneratedKeys;
+      return this;
+    }
+
+    public Builder keyProperty(String keyProperty) {
+      mappedStatement.keyProperty = keyProperty;
+      return this;
+    }
+
     public MappedStatement build() {
       assert mappedStatement.configuration != null;
       assert mappedStatement.id != null;
@@ -100,6 +116,18 @@
 
   }
 
+  public String getKeyProperty() {
+    return keyProperty;
+  }
+
+  public boolean isUseGeneratedKeys() {
+    return useGeneratedKeys;
+  }
+
+  public SqlCommandType getSqlCommandType() {
+    return sqlCommandType;
+  }
+
   public String getResource() {
     return resource;
   }

Copied: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/SqlCommandType.java
 (from r773352, 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethodType.java)
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/SqlCommandType.java?p2=ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/SqlCommandType.java&p1=ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethodType.java&r1=773352&r2=773792&rev=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethodType.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/mapping/SqlCommandType.java
 Tue May 12 05:42:36 2009
@@ -1,5 +1,6 @@
-package org.apache.ibatis.binding;
+package org.apache.ibatis.mapping;
+
+public enum SqlCommandType {
+  UNKNOWN, INSERT, UPDATE, DELETE, SELECT;
 
-public enum MapperMethodType {
-  INSERT, UPDATE, DELETE, SELECT
 }

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSession.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSession.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSession.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSession.java
 Tue May 12 05:42:36 2009
@@ -21,9 +21,9 @@
 
   void select(String statement, Object parameter, int offset, int limit, 
ResultHandler handler);
 
-  Object insert(String statement);
+  int insert(String statement);
 
-  Object insert(String statement, Object parameter);
+  int insert(String statement, Object parameter);
 
   int update(String statement);
 

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java
 Tue May 12 05:42:36 2009
@@ -65,12 +65,11 @@
     }
   }
 
-  public Object insert(String statement) {
+  public int insert(String statement) {
     return insert(statement, null);
   }
 
-  public Object insert(String statement, Object parameter) {
-    //TODO: Return selectKey or autogen key.
+  public int insert(String statement, Object parameter) {
     return update(statement, parameter);
   }
 

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MapperConfig.xml
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MapperConfig.xml?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MapperConfig.xml
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/MapperConfig.xml
 Tue May 12 05:42:36 2009
@@ -15,8 +15,8 @@
     <setting name="lazyLoadingEnabled" value="true"/>
     <setting name="multipleResultSetsEnabled" value="true"/>
     <setting name="useColumnLabel" value="true"/>
+    <setting name="useGeneratedKeys" value="false"/>
     <setting name="enhancementEnabled" value="false"/>
-    <setting name="generatedKeysEnabled" value="false"/>
     <setting name="defaultExecutorType" value="SIMPLE"/>
     <setting name="defaultStatementTimeout" value="25000"/>
   </settings>

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/BaseExecutorTest.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/BaseExecutorTest.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/BaseExecutorTest.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/BaseExecutorTest.java
 Tue May 12 05:42:36 2009
@@ -19,7 +19,7 @@
     config = new Configuration();
     config.setEnhancementEnabled(true);
     config.setLazyLoadingEnabled(true);
-    config.setGeneratedKeysEnabled(false);
+    config.setUseGeneratedKeys(false);
     config.setMultipleResultSetsEnabled(true);
     config.setUseColumnLabel(true);
     config.setDefaultStatementTimeout(5000);
@@ -64,24 +64,22 @@
   public void shouldInsertNewAuthorWithAutoKey() throws Exception {
     DataSource ds = createBlogDataSource();
     Connection connection = ds.getConnection();
-    config.setGeneratedKeysEnabled(true);
-    try {
-      Executor executor = createExecutor(new JdbcTransaction(connection, 
false));
-      Author author = new Author(-1, "someone", "******", 
"[email protected]", null, Section.NEWS);
-      MappedStatement insertStatement = 
ExecutorTestHelper.prepareInsertAuthorMappedStatementWithAutoKey(config);
-      MappedStatement selectStatement = 
ExecutorTestHelper.prepareSelectOneAuthorMappedStatement(config);
-      int id = executor.update(insertStatement, author);
-      if (id != BatchExecutor.BATCH_UPDATE_RETURN_VALUE) {
-        author.setId(id);
-        List<Author> authors = executor.query(selectStatement, id, 
Executor.NO_ROW_OFFSET, Executor.NO_ROW_LIMIT, Executor.NO_RESULT_HANDLER);
-        executor.flushStatements();
-        executor.rollback(true);
-        assertEquals(1, authors.size());
-        assertEquals(author.toString(), authors.get(0).toString());
-        assertTrue(id >= 10000);
-      }
-    } finally {
-      config.setGeneratedKeysEnabled(false);
+    Executor executor = createExecutor(new JdbcTransaction(connection, false));
+    Author author = new Author(-1, "someone", "******", "[email protected]", 
null, Section.NEWS);
+    MappedStatement insertStatement = 
ExecutorTestHelper.prepareInsertAuthorMappedStatementWithAutoKey(config);
+    MappedStatement selectStatement = 
ExecutorTestHelper.prepareSelectOneAuthorMappedStatement(config);
+    int rows = executor.update(insertStatement, author);
+    assertTrue(rows > 0 || rows == BatchExecutor.BATCH_UPDATE_RETURN_VALUE);
+    if (rows == BatchExecutor.BATCH_UPDATE_RETURN_VALUE) {
+      executor.flushStatements();
+    }
+    assertTrue(-1 != author.getId());
+    if (author.getId() != BatchExecutor.BATCH_UPDATE_RETURN_VALUE) {
+      List<Author> authors = executor.query(selectStatement, author.getId(), 
Executor.NO_ROW_OFFSET, Executor.NO_ROW_LIMIT, Executor.NO_RESULT_HANDLER);
+      executor.rollback(true);
+      assertEquals(1, authors.size());
+      assertEquals(author.toString(), authors.get(0).toString());
+      assertTrue(author.getId() >= 10000);
     }
   }
 

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/ExecutorTestHelper.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/ExecutorTestHelper.java?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/ExecutorTestHelper.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/ExecutorTestHelper.java
 Tue May 12 05:42:36 2009
@@ -26,7 +26,7 @@
 
   public static MappedStatement prepareInsertAuthorMappedStatement(final 
Configuration config) {
     final TypeHandlerRegistry registry = config.getTypeHandlerRegistry();
-    MappedStatement ms = new MappedStatement.Builder(config, "insertAuthor", 
new StaticSqlSource("INSERT INTO author 
(id,username,password,email,bio,favourite_section) values(?,?,?,?,?,?)"))
+    MappedStatement ms = new MappedStatement.Builder(config, "insertAuthor", 
new StaticSqlSource("INSERT INTO author 
(id,username,password,email,bio,favourite_section) values(?,?,?,?,?,?)"), 
SqlCommandType.INSERT)
         .parameterMap(
             new ParameterMap.Builder(
                 config, "defaultParameterMap", Author.class,
@@ -46,7 +46,7 @@
 
   public static MappedStatement 
prepareInsertAuthorMappedStatementWithAutoKey(final Configuration config) {
     final TypeHandlerRegistry registry = config.getTypeHandlerRegistry();
-    MappedStatement ms = new MappedStatement.Builder(config, "insertAuthor", 
new StaticSqlSource("INSERT INTO author 
(username,password,email,bio,favourite_section) values(?,?,?,?,?)"))
+    MappedStatement ms = new MappedStatement.Builder(config, "insertAuthor", 
new StaticSqlSource("INSERT INTO author 
(username,password,email,bio,favourite_section) values(?,?,?,?,?)"), 
SqlCommandType.INSERT)
         .parameterMap(
             new ParameterMap.Builder(config, "defaultParameterMap", 
Author.class, new ArrayList<ParameterMapping>() {
               {
@@ -58,13 +58,15 @@
               }
             }).build())
         .cache(authorCache)
+        .useGeneratedKeys(true)
+        .keyProperty("id")
         .build();
     return ms;
   }
 
   public static MappedStatement prepareInsertAuthorProc(final Configuration 
config) {
     final TypeHandlerRegistry registry = config.getTypeHandlerRegistry();
-    MappedStatement ms = new MappedStatement.Builder(config, 
"insertAuthorProc", new StaticSqlSource("{call insertAuthor(?,?,?,?)}"))
+    MappedStatement ms = new MappedStatement.Builder(config, 
"insertAuthorProc", new StaticSqlSource("{call insertAuthor(?,?,?,?)}"), 
SqlCommandType.INSERT)
         .parameterMap(new ParameterMap.Builder(config, "defaultParameterMap", 
Author.class,
             new ArrayList<ParameterMapping>() {
               {
@@ -80,7 +82,7 @@
 
   public static MappedStatement prepareUpdateAuthorMappedStatement(final 
Configuration config) {
     final TypeHandlerRegistry registry = config.getTypeHandlerRegistry();
-    MappedStatement ms = new MappedStatement.Builder(config, "updateAuthor", 
new StaticSqlSource("UPDATE author SET username = ?, password = ?, email = ?, 
bio = ? WHERE id = ?"))
+    MappedStatement ms = new MappedStatement.Builder(config, "updateAuthor", 
new StaticSqlSource("UPDATE author SET username = ?, password = ?, email = ?, 
bio = ? WHERE id = ?"), SqlCommandType.UPDATE)
         .parameterMap(new ParameterMap.Builder(config, "defaultParameterMap", 
Author.class,
             new ArrayList<ParameterMapping>() {
               {
@@ -97,7 +99,7 @@
 
   public static MappedStatement prepareDeleteAuthorMappedStatement(final 
Configuration config) {
     final TypeHandlerRegistry registry = config.getTypeHandlerRegistry();
-    MappedStatement ms = new MappedStatement.Builder(config, "deleteAuthor", 
new StaticSqlSource("DELETE FROM author WHERE id = ?"))
+    MappedStatement ms = new MappedStatement.Builder(config, "deleteAuthor", 
new StaticSqlSource("DELETE FROM author WHERE id = ?"), SqlCommandType.DELETE)
         .parameterMap(new ParameterMap.Builder(config, "defaultParameterMap", 
Author.class,
             new ArrayList<ParameterMapping>() {
               {
@@ -124,7 +126,7 @@
           }
         }).build();
 
-    MappedStatement ms = new MappedStatement.Builder(config, "selectAuthor", 
new StaticSqlSource("SELECT * FROM author WHERE id = ?"))
+    MappedStatement ms = new MappedStatement.Builder(config, "selectAuthor", 
new StaticSqlSource("SELECT * FROM author WHERE id = ?"), SqlCommandType.SELECT)
         .parameterMap(new ParameterMap.Builder(config, "defaultParameterMap", 
Author.class,
             new ArrayList<ParameterMapping>() {
               {
@@ -142,7 +144,7 @@
 
   public static MappedStatement 
prepareSelectAllAuthorsAutoMappedStatement(final Configuration config) {
     final TypeHandlerRegistry registry = config.getTypeHandlerRegistry();
-    return new MappedStatement.Builder(config, "selectAuthorAutoMap", new 
StaticSqlSource("SELECT * FROM author ORDER BY id"))
+    return new MappedStatement.Builder(config, "selectAuthorAutoMap", new 
StaticSqlSource("SELECT * FROM author ORDER BY id"), SqlCommandType.SELECT)
         .resultMaps(new ArrayList<ResultMap>() {
           {
             add(new ResultMap.Builder(config, "defaultResultMap", 
Author.class, new ArrayList() {
@@ -157,7 +159,7 @@
 
   public static MappedStatement 
prepareSelectOneAuthorMappedStatementWithConstructorResults(final Configuration 
config) {
     final TypeHandlerRegistry registry = config.getTypeHandlerRegistry();
-    MappedStatement ms = new MappedStatement.Builder(config, "selectAuthor", 
new StaticSqlSource("SELECT * FROM author WHERE id = ?"))
+    MappedStatement ms = new MappedStatement.Builder(config, "selectAuthor", 
new StaticSqlSource("SELECT * FROM author WHERE id = ?"), SqlCommandType.SELECT)
         .parameterMap(new ParameterMap.Builder(config, "defaultParameterMap", 
Author.class,
             new ArrayList<ParameterMapping>() {
               {
@@ -189,7 +191,7 @@
 
   public static MappedStatement prepareSelectTwoSetsOfAuthorsProc(final 
Configuration config) {
     final TypeHandlerRegistry registry = config.getTypeHandlerRegistry();
-    MappedStatement ms = new MappedStatement.Builder(config, 
"selectTwoSetsOfAuthors", new StaticSqlSource("{call 
selectTwoSetsOfAuthors(?,?)}"))
+    MappedStatement ms = new MappedStatement.Builder(config, 
"selectTwoSetsOfAuthors", new StaticSqlSource("{call 
selectTwoSetsOfAuthors(?,?)}"), SqlCommandType.SELECT)
         .statementType(StatementType.CALLABLE)
         .parameterMap(new ParameterMap.Builder(
             config, "defaultParameterMap", Author.class,
@@ -219,7 +221,7 @@
 
   public static MappedStatement prepareSelectAuthorViaOutParams(final 
Configuration config) {
     final TypeHandlerRegistry registry = config.getTypeHandlerRegistry();
-    MappedStatement ms = new MappedStatement.Builder(config, 
"selectAuthorViaOutParams", new StaticSqlSource("{call 
selectAuthorViaOutParams(?,?,?,?,?)}"))
+    MappedStatement ms = new MappedStatement.Builder(config, 
"selectAuthorViaOutParams", new StaticSqlSource("{call 
selectAuthorViaOutParams(?,?,?,?,?)}"), SqlCommandType.SELECT)
         .statementType(StatementType.CALLABLE)
         .parameterMap(new ParameterMap.Builder(config, "defaultParameterMap", 
Author.class,
             new ArrayList<ParameterMapping>() {
@@ -245,7 +247,7 @@
       }
     }).build();
     config.addResultMap(discriminatorResultMap);
-    MappedStatement ms = new MappedStatement.Builder(config, "selectProducts", 
new StaticSqlSource("SELECT * FROM product"))
+    MappedStatement ms = new MappedStatement.Builder(config, "selectProducts", 
new StaticSqlSource("SELECT * FROM product"), SqlCommandType.SELECT)
         .resultMaps(new ArrayList<ResultMap>() {
           {
             add(new ResultMap.Builder(config, "defaultResultMap", 
HashMap.class, new ArrayList<ResultMapping>() {
@@ -273,7 +275,7 @@
 
   public static MappedStatement 
createInsertAuthorWithIDof99MappedStatement(final Configuration config) {
     final TypeHandlerRegistry registry = config.getTypeHandlerRegistry();
-    MappedStatement ms = new MappedStatement.Builder(config, "insertAuthor", 
new StaticSqlSource("INSERT INTO author (id,username,password,email,bio) 
values(99,'someone','******','[email protected]',null)"))
+    MappedStatement ms = new MappedStatement.Builder(config, "insertAuthor", 
new StaticSqlSource("INSERT INTO author (id,username,password,email,bio) 
values(99,'someone','******','[email protected]',null)"), 
SqlCommandType.INSERT)
         .statementType(StatementType.STATEMENT)
         .parameterMap(new ParameterMap.Builder(config, "defaultParameterMap", 
Author.class,
             new ArrayList<ParameterMapping>()).build())
@@ -284,7 +286,7 @@
 
   public static MappedStatement 
createSelectAuthorWithIDof99MappedStatement(final Configuration config) {
     final TypeHandlerRegistry registry = config.getTypeHandlerRegistry();
-    MappedStatement ms = new MappedStatement.Builder(config, "selectAuthor", 
new StaticSqlSource("SELECT * FROM author WHERE id = 99"))
+    MappedStatement ms = new MappedStatement.Builder(config, "selectAuthor", 
new StaticSqlSource("SELECT * FROM author WHERE id = 99"), 
SqlCommandType.SELECT)
         .statementType(StatementType.STATEMENT)
         .parameterMap(new ParameterMap.Builder(config, "defaultParameterMap", 
Author.class, new ArrayList<ParameterMapping>()).build())
         .resultMaps(new ArrayList<ResultMap>() {
@@ -333,7 +335,7 @@
       }
     }).build();
 
-    return new MappedStatement.Builder(config, "selectBlogById", sqlSource)
+    return new MappedStatement.Builder(config, "selectBlogById", sqlSource, 
SqlCommandType.SELECT)
         .parameterMap(parameterMap)
         .resultMaps(new ArrayList<ResultMap>() {
           {
@@ -373,7 +375,7 @@
       }
     }).build();
 
-    return new MappedStatement.Builder(config, "selectBlogByIdAndAuthor", 
sqlSource)
+    return new MappedStatement.Builder(config, "selectBlogByIdAndAuthor", 
sqlSource, SqlCommandType.SELECT)
         .parameterMap(parameterMap)
         .resultMaps(new ArrayList<ResultMap>() {
           {
@@ -440,7 +442,7 @@
         add(new ResultMapping.Builder(config, 
"comments").nestedResultMapId(commentResultMap.getId()).build());
       }
     }).build();
-    return new MappedStatement.Builder(config, "selectPostsForBlog", sqlSource)
+    return new MappedStatement.Builder(config, "selectPostsForBlog", 
sqlSource, SqlCommandType.SELECT)
         .parameterMap(parameterMap)
         .resultMaps(new ArrayList<ResultMap>() {
           {
@@ -508,7 +510,7 @@
     }).build();
 
 
-    return new MappedStatement.Builder(config, "selectPostsForBlog", sqlSource)
+    return new MappedStatement.Builder(config, "selectPostsForBlog", 
sqlSource, SqlCommandType.SELECT)
         .parameterMap(parameterMap)
         .resultMaps(new ArrayList<ResultMap>() {
           {
@@ -583,7 +585,7 @@
     }).build();
 
 
-    return new MappedStatement.Builder(config, "selectPostsForBlog", sqlSource)
+    return new MappedStatement.Builder(config, "selectPostsForBlog", 
sqlSource, SqlCommandType.SELECT)
         .parameterMap(parameterMap)
         .resultMaps(new ArrayList<ResultMap>() {
           {

Modified: ibatis/trunk/java/ibatis-3/version.properties
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/version.properties?rev=773792&r1=773791&r2=773792&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/version.properties (original)
+++ ibatis/trunk/java/ibatis-3/version.properties Tue May 12 05:42:36 2009
@@ -1,5 +1,5 @@
-#Build version info
-#Sat May 09 22:58:12 MDT 2009
-version=3.0.0
-buildDate=2009/05/09 22\:58
-buildNum=154
+#Build version info
+#Mon May 11 23:39:12 MDT 2009
+version=3.0.0
+buildDate=2009/05/11 23\:39
+buildNum=156


Reply via email to