如何 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 起 Optional
如 fankai 指出的那样被原生支持。
Mybatis从3.5.0开始正式支持Optional return类型,参考http://blog.mybatis.org/2019/01/mybatis-350-released.html
不确定 Roman 的答案是如何工作的......它可能在早期版本的 Mybatis 中工作,正如方法签名所暗示的那样,但显然不适用于最新版本。
有没有办法让 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 起 Optional
如 fankai 指出的那样被原生支持。
Mybatis从3.5.0开始正式支持Optional return类型,参考http://blog.mybatis.org/2019/01/mybatis-350-released.html
不确定 Roman 的答案是如何工作的......它可能在早期版本的 Mybatis 中工作,正如方法签名所暗示的那样,但显然不适用于最新版本。