Как установить тип поставщика класса для целых методов в интерфейсе картографа MyBatis - PullRequest
0 голосов
/ 21 марта 2020

У меня есть интерфейс personMapper и методы, подобные этому.

public interface EmployeeMapper {

    @SelectProvider(type = EmployeeMapperImpl.class, method = "getAll")
    List<Employee> getAll();

//similar methods

}

, а также у меня есть один класс для всего интерфейса

public class EmployeeMapperImpl{


    public String getAll() {
        return new SQL().
                SELECT("*").
                FROM(Employee.class.getSimpleName()).toString();
    }

}

Я хотел бы знать, возможно ли это, как отметить интерфейс, связанный с определенным классом, чтобы избавиться от написания "type = EmployeeMapperImpl" в каждом методе? И полностью избавьтесь от написания method = "getAll", потому что его заголовки одинаковы в классе и в интерфейсе. Я хотел бы получить что-то подобное

@ProviderForAllMethods("EmployeeMapperImpl")
  public interface EmployeeMapper {

        //and methods are associeted by their names(the same in class and constructor)
        List<Employee> getAll();

    //similar methods

    }

Спасибо за помощь

1 Ответ

1 голос
/ 21 марта 2020
  • Пропуск method возможен, если вы используете MyBatis 3.5.1 или новее.
  • Пропуск type на данный момент невозможен (последняя версия 3.5.4).
  • Технически сложно аннотировать сам интерфейс картографического устройства.

Чтобы пропустить method, ваш класс провайдера SQL должен реализовать интерфейс ProviderMethodResolver.
Реализация по умолчанию, как вы ожидаете, ищет метод провайдера с тем же именем, что и у метода интерфейса.

public class EmployeeMapperImpl implements ProviderMethodResolver {

Также мы сделали атрибут type аннотаций SQL провайдера в качестве псевдонима value в версии 3.5.2, поэтому ваш метод отображения может быть немного проще.

public interface EmployeeMapper {
  @SelectProvider(EmployeeMapperImpl.class)
  List<Employee> getAll();
...