如何 return 来自 MyBatis 查询的 Optional

How to return an Optional from MyBatis query

有没有办法让 MyBatis 成为 return 一个 Optional<MyClass> 实例而不是简单的 MyClass 实例?

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 起 Optionalfankai 指出的那样被原生支持。

Mybatis从3.5.0开始正式支持Optional return类型,参考http://blog.mybatis.org/2019/01/mybatis-350-released.html

不确定 Roman 的答案是如何工作的......它可能在早期版本的 Mybatis 中工作,正如方法签名所暗示的那样,但显然不适用于最新版本。