如何使用具有一对多关系的MyBatis可选映射器

时间:2019-07-18 13:43:16

标签: java spring mybatis

我正在尝试通过Java / Spring Boot项目中的MyBatis访问数据库中的数据。我认识到,在数据库中找不到数据时,MyBatis将返回null,因此,我想使用Optional<CustomType>作为返回类型。

此功能在mybatis的3.5.0版本中引入。但是不幸的是,它似乎无法与额外提供的@Results {@Result}注释一起使用,我需要使用该注释来通过另一个方法调用来解析某些对象属性的一对多关系。

有人知道解决这个难题的方法吗?

对于简单对象,如果完全省略Optional<CustomObject>注释,则返回类型@Result{@Result}可以很好地工作。

有效方法:

CustomObject:

public class CustomObject {

    private Long attribute1;

    private String attribute2;
}

MyBatis DAO:

@Select("some SQL statement with columnnames matching the object attributes")
public Optional<CustomObject> methodName(@Param("input") final String input);

什么不起作用:

CustomObject:

public class CustomObject {

    private Long attribute1;

    private String attribute2;

    private List<String> attribute3 = new ArrayList<>();
}

使用类似的DAO方法。

即使没有Optional,它也可以这样工作:

@Select("some SQL statement with columnnames matching the object attributes")
@Results(value={
        @Result(property = "attribute1", column = "attribute1"),
        @Result(property = "attribute2", column = "attribute2"),
        @Result(property = "attribute3", column = "attribute3", javaType = List.class, many=@Many(select = "getattribute3Content"))
})
public CustomType methodName(@Param("input") final String input)

有人知道我如何设置属性的关系,同时返回CustomObject的Optional吗?

0 个答案:

没有答案