如何从MyBatis查询返回Optional?如何让MyBatis返回Optional<MyClass>实例?
如何让MyBatis返回Optional类型结果(包括Optional)
当然可以!MyBatis从3.5.0版本开始就原生支持返回Optional<T>类型的结果了,刚好能解决你问的这两个问题——不管是基础查询返回Optional,还是返回Optional<MyClass>都完全可行,步骤也很简单:
第一步:确认你的MyBatis版本
必须是3.5.0及以上的版本,这个特性是在这个版本才加入的。如果你的版本太低,建议先升级依赖。第二步:修改Mapper接口的返回类型
把原来直接返回MyClass的方法,改成返回Optional<MyClass>就行,不需要做其他复杂改动。举个例子:// 原来的写法:直接返回实体类 // MyClass selectById(Long id); // 修改后的写法:返回Optional包装的实体类 Optional<MyClass> selectById(Long id);第三步:XML映射文件无需额外修改
你的XML映射文件里的resultType或者resultMap依然指定MyClass即可,MyBatis会自动将查询结果包装成Optional对象:<select id="selectById" resultType="com.example.MyClass"> SELECT * FROM my_table WHERE id = #{id} </select>注解式Mapper同样适用
如果你的Mapper是用注解写的,只需要把返回类型改成Optional<MyClass>就好:@Select("SELECT * FROM my_table WHERE id = #{id}") Optional<MyClass> selectById(Long id);
额外说明
当查询结果为空时,MyBatis会返回Optional.empty(),而不是null,这正好契合了Optional的设计初衷——避免空指针异常,让代码的空值处理更优雅。
内容的提问来源于stack exchange,提问作者GordyB
相关产品推荐
相关产品推荐

