如何从MyBatis查询返回Optional

时间:2018-05-07 12:51:05

标签: java mybatis spring-mybatis

有没有办法让MyBatis返回Optional<MyClass>个实例,而不仅仅是MyClass个实例?

2 个答案:

答案 0 :(得分:5)

Mybatis pre 3.5.0

像这样创建自定义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

Mybatis 3.5.0 +

由于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的早期版本中有效,但是显然不适用于最新版本。

相关问题