mybatis-flex / mybatis-flex

mybatis-flex is an elegant Mybatis Enhancement Framework
https://mybatis-flex.com
Apache License 2.0
1.89k stars 182 forks source link

可否对selectOne的方法返回Optional<T> #2

Closed z2z2qp closed 1 year ago

z2z2qp commented 1 year ago

例如将 T selectOneById(@Param(FlexConsts.PRIMARY_VALUE) Serializable id); 改为 Optional<T> selectOneById(@Param(FlexConsts.PRIMARY_VALUE) Serializable id);

yangfuhai commented 1 year ago

目前这个建议已经不好再采纳了,否则会导致之前所有已经用 flex 的项目遭遇升级破坏。

但是,在一般的项目中,都是分成的,比如 service 层中,我们可以在自己的项目中添加通用 BaseService,用来处理类似的需求。

z2z2qp commented 1 year ago

是的,这个具有破坏性,因此我也就询问下

timnick-snow commented 1 year ago

可以添加另一个方法来提供此功能

    default Optional<T> optionalById(Serializable id) {
        return Optional.ofNullable(selectOneById(id));
    }

同样的可以提供

optionalByQuery
optionalByMap
optionalByCondition

不知道作者有没有考虑在flex中提供 baseService,这些方法也可以考虑在service层进行提供

yangfuhai commented 1 year ago

可以添加另一个方法来提供此功能

    default Optional<T> optionalById(Serializable id) {
        return Optional.ofNullable(selectOneById(id));
    }

同样的可以提供

optionalByQuery
optionalByMap
optionalByCondition

不知道作者有没有考虑在flex中提供 baseService,这些方法也可以考虑在service层进行提供

这个添加还是有点啰嗦了 会增加用户的学习成本,用户可以在自己的项目中,自定义个自己的 BaseMapper 比如,MyBaseMapper,这些代码可以写在 MyBaseMapper 里,然后在代码生成器里,指定 Entity 的 Mapper 继承 MyBaseMapper 就可以了。

z2z2qp commented 1 year ago

可以添加另一个方法来提供此功能

    default Optional<T> optionalById(Serializable id) {
        return Optional.ofNullable(selectOneById(id));
    }

同样的可以提供

optionalByQuery
optionalByMap
optionalByCondition

不知道作者有没有考虑在flex中提供 baseService,这些方法也可以考虑在service层进行提供

mybatis本身直接支持返回Optional<T>,如果要保留两者我更倾向与以下实现

Optional<T> selectById(Serializable id);
default T selectObjectById(Serializable id) {
        return selectById(id).orElse(null);
}
yangfuhai commented 1 year ago

目前已经内置了 service 提供了相关功能。