Is there any way to get MyBatis to return an Optional<MyClass>
instance rather than simply a MyClass
instance?
Asked
Active
Viewed 8,821 times
4

GordyB
- 179
- 4
- 14
2 Answers
11
Mybatis pre 3.5.0
Create custom ObjectFactory like this:
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);
}
}
}
And configure it to be used in mybatis.xml
:
<objectFactory type="my.company.project.OptionalAwareObjectFactory"/>
Mybatis 3.5.0+
Since 3.5.0 Optional
is supported natively as fankai pointed out.

Roman-Stop RU aggression in UA
- 14,905
- 3
- 48
- 53
-
Fantastic. Thank you for that. – GordyB May 08 '18 at 06:58
1
Mybatis supports Optional return type officially now since 3.5.0, refer to http://blog.mybatis.org/2019/01/mybatis-350-released.html
Not sure how Roman's answer worked ... it might work in earlier version of Mybatis, as the method signature suggests, but apparently doesn't work with latest versions.

fankai
- 128
- 1
- 8