findAll();
+
+ /**
+ * Returns all instances of the type {@code T} with the given IDs.
+ *
+ * If some or all ids are not found, no entities are returned for these IDs.
+ *
+ * Note that the order of elements in the result is not guaranteed.
+ *
+ * @param ids must not be {@literal null} nor contain any {@literal null} values.
+ * @return guaranteed to be not {@literal null}. The size can be equal or less than the number of given
+ * {@literal ids}.
+ * @throws IllegalArgumentException in case the given {@link Iterable ids} or one of its items is {@literal null}.
+ */
+ List findAllById(Iterable ids);
+
+ /**
+ * Returns the number of entities available.
+ *
+ * @return the number of entities.
+ */
+ long count();
+
+ /**
+ * Deletes the entity with the given id.
+ *
+ * @param id must not be {@literal null}.
+ * @throws IllegalArgumentException in case the given {@literal id} is {@literal null}
+ */
+ void deleteById(ID id);
+
+ /**
+ * Deletes a given entity.
+ *
+ * @param entity must not be {@literal null}.
+ * @throws IllegalArgumentException in case the given entity is {@literal null}.
+ */
+ void delete(T entity);
+
+ /**
+ * Deletes all instances of the type {@code T} with the given IDs.
+ *
+ * @param ids must not be {@literal null}. Must not contain {@literal null} elements.
+ * @throws IllegalArgumentException in case the given {@literal ids} or one of its elements is {@literal null}.
+ */
+ void deleteAllById(Iterable extends ID> ids);
+
+ /**
+ * Deletes the given entities.
+ *
+ * @param entities must not be {@literal null}. Must not contain {@literal null} elements.
+ * @throws IllegalArgumentException in case the given {@literal entities} or one of its entities is {@literal null}.
+ */
+ void deleteAll(Iterable extends T> entities);
+
+ /**
+ * Deletes all entities managed by the repository.
+ */
+ void deleteAll();
+}
diff --git a/src/main/java/org/springframework/data/repository/query/ListQueryByExampleExecutor.java b/src/main/java/org/springframework/data/repository/query/ListQueryByExampleExecutor.java
new file mode 100644
index 0000000000..375265d5e9
--- /dev/null
+++ b/src/main/java/org/springframework/data/repository/query/ListQueryByExampleExecutor.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2022 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.data.repository.query;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.function.Function;
+
+import org.springframework.data.domain.Example;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+
+/**
+ * Interface to allow execution of Query by Example {@link Example} instances. This identical to
+ * {@link QueryByExampleExecutor} but returns {@link List} instead of {@link Iterable} where applicable.
+ *
+ * @param the type of entity for which this executor acts on.
+ * @author Jens Schauder
+ * @since 3.0
+ * @see QueryByExampleExecutor
+ */
+public interface ListQueryByExampleExecutor {
+
+ /**
+ * Returns a single entity matching the given {@link Example} or {@link Optional#empty()} if none was found.
+ *
+ * @param example must not be {@literal null}.
+ * @return a single entity matching the given {@link Example} or {@link Optional#empty()} if none was found.
+ * @throws org.springframework.dao.IncorrectResultSizeDataAccessException if the Example yields more than one result.
+ */
+ Optional findOne(Example example);
+
+ /**
+ * Returns all entities matching the given {@link Example}. In case no match could be found an empty {@link List} is
+ * returned.
+ *
+ * @param example must not be {@literal null}.
+ * @return all entities matching the given {@link Example}.
+ */
+ List findAll(Example example);
+
+ /**
+ * Returns all entities matching the given {@link Example} applying the given {@link Sort}. In case no match could be
+ * found an empty {@link List} is returned.
+ *
+ * @param example must not be {@literal null}.
+ * @param sort the {@link Sort} specification to sort the results by, must not be {@literal null}.
+ * @return all entities matching the given {@link Example}.
+ */
+ List findAll(Example example, Sort sort);
+
+ /**
+ * Returns a {@link Page} of entities matching the given {@link Example}. In case no match could be found, an empty
+ * {@link Page} is returned.
+ *
+ * @param example must not be {@literal null}.
+ * @param pageable can be {@literal null}.
+ * @return a {@link Page} of entities matching the given {@link Example}.
+ */
+ Page findAll(Example example, Pageable pageable);
+
+ /**
+ * Returns the number of instances matching the given {@link Example}.
+ *
+ * @param example the {@link Example} to count instances for. Must not be {@literal null}.
+ * @return the number of instances matching the {@link Example}.
+ */
+ long count(Example example);
+
+ /**
+ * Checks whether the data store contains elements that match the given {@link Example}.
+ *
+ * @param example the {@link Example} to use for the existence check. Must not be {@literal null}.
+ * @return {@literal true} if the data store contains elements that match the given {@link Example}.
+ */
+ boolean exists(Example example);
+
+ /**
+ * Returns entities matching the given {@link Example} applying the {@link Function queryFunction} that defines the
+ * query and its result type.
+ *
+ * @param example must not be {@literal null}.
+ * @param queryFunction the query function defining projection, sorting, and the result type
+ * @return all entities matching the given {@link Example}.
+ */
+ R findBy(Example example, Function, R> queryFunction);
+}