欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis設(shè)計(jì)SQL返回布爾值(Boolean)的常見方法

 更新時(shí)間:2025年06月08日 15:25:01   作者:悟能不能悟  
這篇文章主要為大家詳細(xì)介紹了MyBatis設(shè)計(jì)SQL返回布爾值(Boolean)的幾種常見方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

方案一:使用COUNT查詢存在性(推薦)

<select id="checkUserExists" resultType="_boolean">
    SELECT COUNT(*) > 0 
    FROM users 
    WHERE username = #{username}
</select>

說明??:

MySQL中COUNT(*) > 0直接返回1(true)或0(false)

MyBatis自動(dòng)將數(shù)字轉(zhuǎn)換為Java的boolean類型(1→true, 0→false)

方案二:條件表達(dá)式直接返回布爾

<select id="isAccountActive" resultType="java.lang.Boolean">
    SELECT (status = 'ACTIVE') 
    FROM accounts 
    WHERE account_id = #{id}
</select>

方案三:存在性檢查(EXISTS優(yōu)化)

<select id="hasUserPermission" resultType="boolean">
    SELECT EXISTS(
        SELECT 1 
        FROM permissions 
        WHERE user_id = #{userId} 
        AND permission = #{perm}
    )
</select>

??優(yōu)勢(shì)??:比COUNT更高效,數(shù)據(jù)庫(kù)在找到第一條匹配記錄即返回

方案四:處理更新/刪除操作

<update id="deactivateUser">
    UPDATE users SET active = 0 WHERE id = #{id}
</update>

在Mapper接口定義:

// 返回Boolean類型
Boolean deactivateUser(Long id);

??原理??:MyBatis自動(dòng)將影響行數(shù)轉(zhuǎn)換:

  • ≥1行 → true
  • 0行 → false

方案五:自定義TypeHandler(高級(jí)用法)

創(chuàng)建處理器:

public class BooleanTypeHandler extends BaseTypeHandler<Boolean> {
    @Override
    public void setNonNullParameter(...) {
        ps.setString(i, parameter ? "Y" : "N");
    }
    
    @Override
    public Boolean getNullableResult(ResultSet rs, String col) {
        return "Y".equals(rs.getString(col));
    }
    // 其他重寫方法省略...
}

配置使用:

<resultMap type="User">
    <result property="vip" column="is_vip" 
            typeHandler="com.example.BooleanTypeHandler"/>
</resultMap>

最佳實(shí)踐建議

1.??查詢場(chǎng)景優(yōu)先用??

SELECT COUNT(*) > 0 FROM ...  -- 簡(jiǎn)單條件
SELECT EXISTS(...)           -- 復(fù)雜條件

2.??更新場(chǎng)景??:直接用Boolean接收更新操作返回值

3.避免誤區(qū)??:

<!-- 錯(cuò)誤:resultType不能是boolean -->
<select id="isAdmin" resultType="boolean">
     SELECT is_admin FROM users WHERE id=#{id}
</select>

需改為:

<select id="isAdmin" resultType="_boolean">
     SELECT IF(is_admin='Y', true, false) 
     FROM users 
     WHERE id=#{id}
</select>

完整使用示例

Mapper接口:

public interface UserMapper {
    // 檢查用戶名是否存在
    boolean existsByUsername(@Param("name") String username);
    
    // 禁用用戶并返回是否成功
    Boolean deactivateUser(Long id);
}

XML配置:

<select id="existsByUsername" resultType="_boolean">
    SELECT EXISTS(
        SELECT 1 FROM users 
        WHERE username = #{name}
    )
</select>
 
<update id="deactivateUser">
    UPDATE users SET active = 0 WHERE id = #{id}
</update>

Java調(diào)用:

UserMapper mapper = session.getMapper(UserMapper.class);
 
// 檢查用戶名
boolean exists = mapper.existsByUsername("john_doe");
System.out.println("Username exists? " + exists);
 
// 禁用用戶
Boolean success = mapper.deactivateUser(1001L);
if(success) {
    System.out.println("User deactivated");
}

根據(jù)具體數(shù)據(jù)庫(kù)類型可能需要調(diào)整:

??Oracle??:用1和0代替布爾

??PostgreSQL??:可直接返回::boolean

??SQL Server??:用CASE WHEN...THEN 1 ELSE 0 END

到此這篇關(guān)于MyBatis設(shè)計(jì)SQL返回布爾值(Boolean)的常見方法的文章就介紹到這了,更多相關(guān)MyBatis設(shè)計(jì)SQL返回布爾值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java:com.netflix.client.ClientException錯(cuò)誤解決

    Java:com.netflix.client.ClientException錯(cuò)誤解決

    本文主要介紹了Java:com.netflix.client.ClientException錯(cuò)誤解決,主要是指出客戶端?module-sso?試圖通過負(fù)載均衡器訪問服務(wù)時(shí),負(fù)載均衡器沒有找到可用的服務(wù)器來處理請(qǐng)求,下面就來介紹一下解決方法
    2024-08-08
  • Spring Boot中@Conditional注解介紹

    Spring Boot中@Conditional注解介紹

    @Conditional表示僅當(dāng)所有指定條件都匹配時(shí),組件才有資格注冊(cè)。該@Conditional注釋可以在以下任一方式使用:作為任何@Bean方法的方法級(jí)注釋、作為任何類的直接或間接注釋的類型級(jí)別注釋@Component,包括@Configuration類、作為元注釋,目的是組成自定義構(gòu)造型注釋
    2022-09-09
  • 淺談MyBatis通用Mapper實(shí)現(xiàn)原理

    淺談MyBatis通用Mapper實(shí)現(xiàn)原理

    這篇文章主要介紹了淺談MyBatis通用Mapper實(shí)現(xiàn)原理,本文會(huì)先介紹通用 Mapper 的簡(jiǎn)單原理,然后使用最簡(jiǎn)單的代碼來實(shí)現(xiàn)這個(gè)過程。感興趣的小伙伴們可以參考一下
    2018-10-10
  • 基于Java中的數(shù)值和集合詳解

    基于Java中的數(shù)值和集合詳解

    下面小編就為大家?guī)硪黄贘ava中的數(shù)值和集合詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java中JSON格式反序列化為Map且保證存取順序一致的問題

    Java中JSON格式反序列化為Map且保證存取順序一致的問題

    這篇文章主要介紹了Java中JSON格式反序列化為Map且保證存取順序一致的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Java局部?jī)?nèi)部類和匿名內(nèi)部類定義與用法實(shí)例分析

    Java局部?jī)?nèi)部類和匿名內(nèi)部類定義與用法實(shí)例分析

    這篇文章主要介紹了Java局部?jī)?nèi)部類和匿名內(nèi)部類,結(jié)合實(shí)例形式分析了java局部?jī)?nèi)部類和匿名內(nèi)部類相關(guān)定義、原理與用法,需要的朋友可以參考下
    2019-08-08
  • springboot集成mybatis-plus遇到的問題及解決方法

    springboot集成mybatis-plus遇到的問題及解決方法

    這篇文章主要介紹了springboot集成mybatis-plus遇到的問題及解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • SpringBoot actuator 健康檢查不通過的解決方案

    SpringBoot actuator 健康檢查不通過的解決方案

    這篇文章主要介紹了SpringBoot actuator 健康檢查不通過的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot實(shí)現(xiàn)海量數(shù)據(jù)高效實(shí)時(shí)搜索功能

    SpringBoot實(shí)現(xiàn)海量數(shù)據(jù)高效實(shí)時(shí)搜索功能

    我們都知道隨著業(yè)務(wù)系統(tǒng)的發(fā)展和使用,數(shù)據(jù)庫(kù)存儲(chǔ)的業(yè)務(wù)數(shù)據(jù)量會(huì)越來越大,逐漸成為了業(yè)務(wù)系統(tǒng)的瓶頸,本文給大家介紹了Spring Boot業(yè)務(wù)系統(tǒng)如何實(shí)現(xiàn)海量數(shù)據(jù)高效實(shí)時(shí)搜索,文中有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-10-10
  • Java中LambdaQueryWrapper設(shè)置自定義排序代碼示例

    Java中LambdaQueryWrapper設(shè)置自定義排序代碼示例

    這篇文章主要給大家介紹了關(guān)于Java中LambdaQueryWrapper設(shè)置自定義排序的相關(guān)資料,lambdaquerywrapper是MyBatis-Plus框架中的一個(gè)查詢條件構(gòu)造器,它可以用于構(gòu)建自定義的查詢條件,需要的朋友可以參考下
    2023-12-12

最新評(píng)論