Annotation Interface BatchMapping


@Target(METHOD) @Retention(RUNTIME) @Documented public @interface BatchMapping
Annotation for a handler method that batch loads field values, given a list of source/parent values. For example:
 @BatchMapping
 public Mono<Map<Book, Author>> author(List<Book> books) {
     // ...
 }
 

The annotated method is registered as a batch loading function via BatchLoaderRegistry, and along with it, a DataFetcher for the field is registered transparently that looks up the field value through the registered DataLoader.

Effectively, a shortcut for:

 @Controller
 public class BookController {

     public BookController(BatchLoaderRegistry registry) {
         registry.forTypePair(Long.class, Author.class).registerMappedBatchLoader((ids, environment) -> ...);
     }

     @SchemaMapping
     public CompletableFuture<Author> author(Book book, DataLoader<Long, Author> dataLoader) {
         return dataLoader.load(book.getAuthorId());
     }

 }
 

In addition to returning Mono<Map<K,T>>, an @BatchMapping method can also return Flux<T>. However, in that case the returned sequence of values must match the number and order of the input keys. See BatchLoader and MappedBatchLoader for more details.

Since:
1.0.0
Author:
Rossen Stoyanchev
  • Optional Element Summary

    Optional Elements
    Modifier and Type
    Optional Element
    Description
    Customize the name of the GraphQL field to bind to.
    int
    Set the maximum number of keys to include a single batch, before splitting into multiple batches of keys to load.
    Customizes the name of the source/parent type for the GraphQL field.
    Effectively an alias for field().
  • Element Details

    • field

      @AliasFor("value") String field
      Customize the name of the GraphQL field to bind to.

      By default, if not specified, this is initialized from the method name.

      Default:
      ""
    • value

      @AliasFor("field") String value
      Effectively an alias for field().
      Default:
      ""
    • typeName

      String typeName
      Customizes the name of the source/parent type for the GraphQL field.

      By default, if not specified, it is based on the simple class name of the List of source/parent values injected into the handler method.

      The value for this attribute can also be inherited from a class-level @SchemaMapping. When used on both levels, the one here overrides the one at the class level.

      Default:
      ""
    • maxBatchSize

      int maxBatchSize
      Set the maximum number of keys to include a single batch, before splitting into multiple batches of keys to load.

      By default this is -1 in which case there is no limit.

      Since:
      1.1
      Default:
      -1