mybatis配置返回boolean类型
·
先大概说明一下ResultMap和ResultType的使用场景
- ResultMap适用于复杂的查询,可以处理多表关联查询、嵌套查询等情况。通过ResultMap,可以更精确地控制查询结果的映射。
- ResultType适用于简单的查询,而ResultMap适用于复杂的查询。具体使用哪种方式,取决于查询结果的结构和映射需求。
ResultType的值一般采用别名方式:
- 对于引用数据类型,都是将大写字母转小写,如java.lang.String对应的别名是’string’;HashMap对应的别名是’hashmap’
- 对于基本数据类型,考虑到重复的问题,会在其前面加上_,如int对应的别名是’_int’;boolean对应的别名是’_boolean’
在业务开发中,我们可能会遇到这样的需求:在对数据进行操作时,先判断有没有对应的记录,如果有,再进行操作。实现的方式有多种,现针对mybatis的实现进行说明。
Mapper方法
//是否存在当前状态的订单
boolean existsOrder(@Param("orderStatus") String orderStatus);
<select id="existsOrder" parameterType="String" resultType="_boolean">
select count(`id`)
from `order`
where `status` = #{orderStatus}
</select>
Mybatis是根据查询到的记录数进行转换的(1表示为true,0表示为false) 。然而,如果查询到多条记录(大于1),则返回的布尔值为false。
这个和mysql的版本有关系,故为了兼容版本我们可以考虑做如下sql改造使用 limit 1 限制只查一条数据。
<select id="existsOrder" parameterType="String" resultType="_boolean">
select count(1)
from (select 1
from `order`
where `status` = #{orderStatus} limit 1) t_
</select>
测试方法:
@Test
public void testExistsOrder(){
//如果查询到则返回true;否则返回false
boolean existsUnfishedOrder = orderMapper.existsOrder("unfinished");
if (existsUnfishedOrder){
// 业务逻辑
} else {
throw new Exception("不存在符合条件的订单!");
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)