package org.gbif.checklistbank.service.mybatis.mapper; import org.apache.ibatis.session.ResultHandler; import org.gbif.api.model.checklistbank.VernacularName; import org.gbif.api.model.common.paging.Pageable; import org.gbif.checklistbank.model.UsageRelated; import java.util.List; import java.util.UUID; import org.apache.ibatis.annotations.Param; /** * A generic MyBatis mapper for NameUsageComponent subclasses. * * @param <T> the interpreted model class. */ public interface NameUsageComponentMapper<T> { List<T> listByChecklistUsage(@Param("key") int usageKey, @Param("page") Pageable page); List<T> listByNubUsage(@Param("key") int nubKey, @Param("page") Pageable page); List<UsageRelated<T>> listByChecklistUsageRange(@Param("start") int usageKeyStart, @Param("end") int usageKeyEnd); List<UsageRelated<T>> listByNubUsageRange(@Param("start") int usageKeyStart, @Param("end") int usageKeyEnd); void deleteByUsage(@Param("key") int usageKey); /** * Iterates over all components of a given dataset and processes them with the supplied handler. * This allows a single query to efficiently stream all its values without keeping them in memory. * * @param handler to process each name usage with */ void processDataset(@Param("uuid") UUID datasetKey, ResultHandler<T> handler); }