Как вернуть Optional из запроса MyBatis

Есть ли способ заставить MyBatis возвращать экземпляр Optional<MyClass>, а не просто экземпляр MyClass?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
4 900
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Mybatis до 3.5.0

Создайте собственный ObjectFactory следующим образом:

class OptionalAwareObjectFactory extends DefaultObjectFactory {

  public Object create(Class type, List<Class> constructorArgTypes, List<Object> constructorArgs) {
     if (Optional.class.isAssignableFrom(type)) {
        return Optional.fromNullable(Iterables.getOnlyElement(constructorArgs));
     } else {
        return super.create(type, constructorArgTypes, constructorArgs);
     }
  }
}

И настройте его для использования в mybatis.xml:

 <objectFactory type = "my.company.project.OptionalAwareObjectFactory"/>

Mybatis 3.5.0+

Начиная с 3.5.0, Optional поддерживается изначально, как указано в фанкай.

Фантастический. Спасибо тебе за это.

GordyB 08.05.2018 08:58

Mybatis официально поддерживает дополнительный тип возвращаемого значения, начиная с версии 3.5.0, см. http://blog.mybatis.org/2019/01/mybatis-350-released.html

Не уверен, как работал ответ Романа ... он может работать в более ранней версии Mybatis, как следует из сигнатуры метода, но, по-видимому, не работает с последними версиями.

Другие вопросы по теме