Example #1
0
 public SqlCommand(Configuration configuration, Class<?> mapperInterface, Method method) {
   String statementName = mapperInterface.getName() + "." + method.getName();
   MappedStatement ms = null;
   if (configuration.hasStatement(statementName)) {
     ms = configuration.getMappedStatement(statementName);
   } else if (!mapperInterface.equals(method.getDeclaringClass())) { // issue #35
     String parentStatementName = method.getDeclaringClass().getName() + "." + method.getName();
     if (configuration.hasStatement(parentStatementName)) {
       ms = configuration.getMappedStatement(parentStatementName);
     }
   }
   if (ms == null) {
     if (method.getAnnotation(Flush.class) != null) {
       name = null;
       type = SqlCommandType.FLUSH;
     } else {
       throw new BindingException("Invalid bound statement (not found): " + statementName);
     }
   } else {
     name = ms.getId();
     type = ms.getSqlCommandType();
     if (type == SqlCommandType.UNKNOWN) {
       throw new BindingException("Unknown execution method for: " + name);
     }
   }
 }
 /** 设置当前的参数的类型信息 */
 private void setupCommandType() {
   MappedStatement ms = config.getMappedStatement(commandName);
   type = ms.getSqlCommandType();
   if (type != SqlCommandType.SELECT) {
     throw new BindingException("Unsupport execution method for: " + commandName);
   }
 }
 private Object getNestedQueryConstructorValue(
     ResultSet rs, ResultMapping constructorMapping, String columnPrefix) throws SQLException {
   final String nestedQueryId = constructorMapping.getNestedQueryId();
   final MappedStatement nestedQuery = configuration.getMappedStatement(nestedQueryId);
   final Class<?> nestedQueryParameterType = nestedQuery.getParameterMap().getType();
   final Object nestedQueryParameterObject =
       prepareParameterForNestedQuery(
           rs, constructorMapping, nestedQueryParameterType, columnPrefix);
   Object value = null;
   if (nestedQueryParameterObject != null) {
     final BoundSql nestedBoundSql = nestedQuery.getBoundSql(nestedQueryParameterObject);
     final CacheKey key =
         executor.createCacheKey(
             nestedQuery, nestedQueryParameterObject, RowBounds.DEFAULT, nestedBoundSql);
     final Class<?> targetType = constructorMapping.getJavaType();
     final ResultLoader resultLoader =
         new ResultLoader(
             configuration,
             executor,
             nestedQuery,
             nestedQueryParameterObject,
             targetType,
             key,
             nestedBoundSql);
     value = resultLoader.loadResult();
   }
   return value;
 }
 private void makeSureGeneratedKeysAreNotUsedInBatchInserts(String statement) {
   Configuration configuration = session.getConfiguration();
   if (null != configuration) {
     MappedStatement mappedStatement = configuration.getMappedStatement(statement);
     if (null != mappedStatement) {
       KeyGenerator keyGenerator = mappedStatement.getKeyGenerator();
       if (keyGenerator instanceof Jdbc3KeyGenerator) {
         throw new IllegalStateException("Batch inserts cannot use generated keys");
       }
     }
   }
 }
 private Object getNestedQueryMappingValue(
     ResultSet rs,
     MetaObject metaResultObject,
     ResultMapping propertyMapping,
     ResultLoaderMap lazyLoader,
     String columnPrefix)
     throws SQLException {
   final String nestedQueryId = propertyMapping.getNestedQueryId();
   final String property = propertyMapping.getProperty();
   final MappedStatement nestedQuery = configuration.getMappedStatement(nestedQueryId);
   final Class<?> nestedQueryParameterType = nestedQuery.getParameterMap().getType();
   final Object nestedQueryParameterObject =
       prepareParameterForNestedQuery(rs, propertyMapping, nestedQueryParameterType, columnPrefix);
   Object value = NO_VALUE;
   if (nestedQueryParameterObject != null) {
     final BoundSql nestedBoundSql = nestedQuery.getBoundSql(nestedQueryParameterObject);
     final CacheKey key =
         executor.createCacheKey(
             nestedQuery, nestedQueryParameterObject, RowBounds.DEFAULT, nestedBoundSql);
     final Class<?> targetType = propertyMapping.getJavaType();
     if (executor.isCached(nestedQuery, key)) {
       executor.deferLoad(nestedQuery, metaResultObject, property, key, targetType);
     } else {
       final ResultLoader resultLoader =
           new ResultLoader(
               configuration,
               executor,
               nestedQuery,
               nestedQueryParameterObject,
               targetType,
               key,
               nestedBoundSql);
       if (propertyMapping.isLazy()) {
         lazyLoader.addLoader(property, metaResultObject, resultLoader);
       } else {
         value = resultLoader.loadResult();
       }
     }
   }
   return value;
 }