Как связать методы в одном интерфейсе с различными SqlSessrions - PullRequest
0 голосов
/ 09 октября 2018

В моем весеннем загрузочном приложении мне нужно подключиться к нескольким источникам данных (я знаю, что это анти-паттерн).Итак, я настроил разные источники данных и соответствующие SqlSessionFactories.С MapperScannerConfigurer я могу указать на разные пакеты.Так, например, связать интерфейсы в пакете com.dat.dao1 с SqlSessionFactory1 и интерфейсы в com.dat.dao2 с SqlSessionFactory2.Мне было интересно, есть ли способ иметь эту привязку на уровне метода, чтобы я мог решить, какой метод поддерживается каким SqlSessionFactory.Есть ли аннотация, с помощью которой я могу выбрать SqlSessionFactory или даже SqlSession?

1 Ответ

0 голосов
/ 09 октября 2018

Это не поддерживается из коробки в mybatis.Если вы хотите изменить это поведение, вам нужно изменить поведение MapperProxy .Вы можете сделать его метод invoke чувствительным к некоторой аннотации и использовать соответствующий SqlSession.

Хотя это довольно просто, требуется больше усилий, чтобы mybatis использовал вашу реализацию.Чтобы использовать вашу реализацию вместо существующих MapperProxy, вам нужно изменить

  1. MapperProxyFactory, чтобы создать свой класс вместо MapperProxy
  2. MapperRegistry, чтобы использовать васMapperProxyFactory
  3. и MapperScannerConfigurer для использования MapperRegistry

, потому что все эти классы жестко запрограммированы и не настраиваются.

Так что это гораздо прощеиспользовать два отдельных MapperScannerConfigurer, которые сканируют разные пакеты или которые настроили разные annotationClass.

...