Mybatis 返回布尔值? 别慌,我有妙招!

Mybatis 返回布尔值? 别慌,我有妙招!

经验文章nimo972025-05-23 19:45:312A+A-

很多同学在使用 Mybatis 时,遇到需要返回布尔类型结果的场景,却发现配置起来有点棘手。


别担心,今天就带你走进 Mybatis 返回布尔值的奇妙世界,让你轻松搞定各种场景!

1. 使用 resultType=boolean

最简单的方式就是直接将 resultType 设置为 boolean 类型。

示例代码:

xml
<select id="isUserExist" resultType="boolean">
  SELECT EXISTS (
    SELECT 1
    FROM user
    WHERE username = #{username}
  )
</select>

2. 使用 resultType=java.lang.Boolean

如果你需要区分 null 和 false, 可以将 resultType 设置为 java.lang.Boolean 类型。

示例代码:

xml
<select id="isUserExist" resultType="java.lang.Boolean">
  SELECT 1
  FROM user
  WHERE username = #{username}
</select>

3. 使用 resultType=int,然后进行类型转换

对于一些特定场景,例如数据库中使用 1 代表 true,0 代表 false, 可以使用 resultType=int,然后在代码中进行类型转换。

示例代码:

xml
<select id="isUserActive" resultType="int">
  SELECT is_active
  FROM user
  WHERE id = #{userId}
</select>

代码示例:

java
// 获取用户是否存在
Boolean isExist = userMapper.isUserExist("admin");

// 获取用户是否激活
int isActive = userMapper.isUserActive(1);
boolean active = isActive == 1;

4. 使用 @Result 注解自定义映射

如果你的 SQL 语句返回的字段名不是true 或 false, 可以使用@Result 注解自定义映射。

示例代码:

java
@ResultType(Boolean.class)
public interface UserMapper {

    @Select("SELECT is_active FROM user WHERE id = #{userId}")
    @Result(column = "is_active", property = "active", javaType = Boolean.class)
    Boolean isUserActive(int userId);
}

源码解析:

Mybatis 在解析 SQL 语句时,会根据 resultType 属性来确定返回类型。

  • 当 resultType 为 boolean 或 java.lang.Boolean 时,Mybatis 会根据数据库返回的结果进行类型转换。
  • 当 resultType 为 int 时,Mybatis 会将数据库返回的整数结果直接映射到 int 类型。

总结:

  • 对于简单场景,直接使用 resultType=boolean 或 resultType=java.lang.Boolean 即可。
  • 对于复杂场景,可以使用 @Result 注解自定义映射,或结合 int 类型进行类型转换。

希望这篇文章对你有所帮助,祝你使用 Mybatis 返回布尔值更加得心应手!

欢迎在评论区分享你的经验和困惑,一起探讨学习,共同进步!

点击这里复制本文地址 以上内容由nimo97整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

尼墨宝库 © All Rights Reserved.  蜀ICP备2024111239号-7