有没有办法让MyBatis返回Optional<MyClass>
个实例,而不仅仅是MyClass
个实例?
答案 0 :(得分:5)
像这样创建自定义ObjectFactory:
version: '2'
services:
lab-mysql:
container_name: lab-mysql
restart: always
image: mysql/mysql-server:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_ROOT_HOST: "%"
MYSQL_DATABASE: keycloak
MYSQL_USER: keycloak
MYSQL_PASSWORD: password
volumes:
- ./lab-mysql:/var/lib/mysql
ports:
- 3306:3306
keycloak:
container_name: lab-keycloak
restart: always
image: jboss/keycloak:3.4.3.Final
depends_on:
- lab-mysql
environment:
DB_VENDOR: mysql
DB_ADDR: lab-mysql
DB_PORT: 3306
DB_DATABASE: keycloak
DB_USER: keycloak
DB_PASSWORD: password
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: password
ports:
- 8080:8080
- 8443:8443
- 9990:9990
volumes:
- ./lab-keycloak:/data
links:
- lab-mysql
并将其配置为在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
由于fankai指出3.5.0 <objectFactory type="my.company.project.OptionalAwareObjectFactory"/>
本身支持。
答案 1 :(得分:0)
Mybatis从3.5.0版本开始现在正式支持Optional返回类型,请参考http://blog.mybatis.org/2019/01/mybatis-350-released.html
不知道Roman的答案是如何工作的……如方法签名所示,它可能在Mybatis的早期版本中有效,但是显然不适用于最新版本。