private Consumer<PreparedBinding> prepareBinder(PreparedBinding preparedBindingTemplate) {
            List<Consumer<PreparedBinding>> innerBinders = new ArrayList<>(paramNames.size());
            for (int i = 0; i < paramNames.size(); i++) {
                final int index = i;
                final String name = paramNames.get(i);
                final Object value = preparedBindingTemplate.named.get(name);
                if (value == null && !preparedBindingTemplate.named.containsKey(name)) {
                    final Optional<Entry<PrepareKey, Function<Object, Argument>>> preparation =
                        preparedBindingTemplate.prepareKeys.keySet().stream()
                            .map(pk -> new AbstractMap.SimpleImmutableEntry<>(pk, batch.preparedFinders.get(pk)))
                            .flatMap(e ->
                                e.getValue()
                                    .apply(name)
                                    .<Entry<PrepareKey, Function<Object, Argument>>>map(pf -> new AbstractMap.SimpleImmutableEntry<>(e.getKey(), pf)).stream())
                            .findFirst();
                    if (preparation.isPresent()) {
                        Entry<PrepareKey, Function<Object, Argument>> p = preparation.get();
                        innerBinders.add(wrapCheckedConsumer(name,
                            binding -> p.getValue()
                                .apply(binding.prepareKeys.get(p.getKey()))
                                .apply(index + 1, stmt, ctx)));
                    } else {
                        innerBinders.add(wrapCheckedConsumer(name,
                            binding -> binding.namedArgumentFinder.stream()
                                .flatMap(naf -> naf.find(name, ctx).stream())
                                .findFirst()
                                .orElseGet(() ->
                                    binding.realizedBackupArgumentFinders.get().stream()
                                        .flatMap(naf -> naf.find(name, ctx).stream())
                                        .findFirst()
                                        .orElseThrow(() -> missingNamedParameter(name, binding)))
                                .apply(index + 1, stmt, ctx)));
                    }
                } else {
                    final Function<Object, Argument> binder = argumentFactoryForType(typeOf(value));
                    innerBinders.add(wrapCheckedConsumer(name,
                        binding -> binder.apply(unwrap(binding.named.get(name)))
                            .apply(index + 1, stmt, ctx)));
                }
            }
            return binding -> innerBinders.forEach(b -> b.accept(binding));
        }
@deprecated prepare the argument by type instead
core/src/main/java/org/jdbi/v3/core/statement/ArgumentBinder.java