public static List<Object[]> generateBatchQueryArguments(Object[] args, BatchDefinition batchDefinition) {
		// 获取批量SQL/Shell的批数，即@BatchParam对应的几个数组的最小length
		int batchSize = -1;
		Integer[] batchParamIndexes = batchDefinition.getBatchParamIndexes();
		for (int i = 0; i < batchParamIndexes.length; i++) {
			int index = batchParamIndexes[i];
			if (batchSize == -1) {
				batchSize = ArrayHelper.getArrayOrListLength(args[index]);
			} else {
				batchSize = Math.min(batchSize, ArrayHelper.getArrayOrListLength(args[index]));
			}
		}

		Method[] getterMethods = batchDefinition.getGetterMethods();
		Integer[] parameterIndexes = batchDefinition.getParameterIndexes();
		List<Object[]> paramArrays = new ArrayList<Object[]>(batchSize);
		List<String> parameterNames = batchDefinition.getParsedExpression().getParameterNames();

		// 每次克隆一组调用参数，然后用批量参数中这个批次中的批量参数值替换这个批量参数
		for (int i = 0; i < batchSize; i++) {
			Object[] cloneArgs = ArrayHelper.clone(args);

			for (int j = 0; j < batchParamIndexes.length; j++) {
				int index = batchParamIndexes[j];
				cloneArgs[index] = fetchArrayValue(cloneArgs[index], i);
			}

			Object[] paramArray = fetchValues(getterMethods, parameterIndexes, cloneArgs, parameterNames);
			paramArrays.add(paramArray);
		}

		return paramArrays;
	}