最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis的if從句中的賦值烏龍

 更新時間:2025年05月28日 09:27:17   作者:shenzhou_yh  
本文主要介紹了Mybatis的if從句中的賦值烏龍,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

最近遇到一個有點意思的bug,特此記錄一下。

問題背景

前臺參數(shù):前端請求后臺接口,上送參數(shù)進行查詢,上傳參數(shù)如下:

接口上送參數(shù)

可知上送為兩個參數(shù):activityType: “3”,merchantId: “3a9d21a0d18a4e1c819dac57b1730992”

  • 后臺邏輯
String activityType = vo.getActivityType();
		String merchantId = vo.getMerchantId();
		List<TbMarketActivity> activity = activityMapper.getActivityByMerchantId(activityType, merchantId);
  • SQL語句
<select id="getActivityByMerchantId"
            resultType="cn.buyforyou.aipc.small.api.entity.marketActivity.TbMarketActivity">
        SELECT
        <include refid="tbMarketActivityColumns"/>,
        b.product_discount as "productDiscount"
        FROM
        tb_market_activity a
        left join tb_market_activity_product b on a.activity_id = b.activity_id
        <where>
            a.status = '2'
            and a.activity_type = #{activityType}
            and a.merchant_id = #{merchantId}
        </where>
        <if test="activityType != null and activityType = '2'.toString()">
			order by product_discount
		</if>
		limit 1
    </select>

后臺直接使用前臺參數(shù)進行數(shù)據(jù)庫查詢,sql日志如下:

 ==> Preparing: SELECT a.activity_id AS "activityId", b.product_discount as "productDiscount" FROM tb_market_activity a left join tb_market_activity_product b on a.activity_id = b.activity_id WHERE a.status = '2' and a.activity_type = ? and a.merchant_id = ? order by product_discount limit 1 
 ==> Parameters: 2(String), 3a9d21a0d18a4e1c819dac57b1730992(String)
 <==      Total: 0

那么問題就來了,中間并沒有進行任何的上傳參數(shù)處理,但是到了SQL語句中,activity_type的值是2,而不是上傳的3

問題分析

排查一:確認上送參數(shù)

在這里插入圖片描述

如圖,上傳參數(shù)確實為3,但是到了sql中還是2,很納悶,確定不是上送參數(shù)的問題

  • 排查二:SQL語句
    本次sql并不復(fù)雜,就是一個簡單的條件過濾查詢,而且根據(jù)SQL日志來看,也已經(jīng)成功綁定了

  • 排查三:特么沒有可排查的啦,簡直就沒找到錯誤,暫定為懸案

反思:為啥上傳和代碼處理都正確,但是SQL賦值出現(xiàn)錯誤,明明上傳的activityType為3,可最后的條件是2;但又為啥不是其他偏偏是2呢。。。。。。

問題解決

問題的關(guān)鍵點就在于為啥偏偏是2身上,仔細看一下sql語句,這個activityType還是和2產(chǎn)生過聯(lián)系的。如下:

在這里插入圖片描述

這是一個簡單的條件判斷,并決定排序字段的語句,但是中間卻使用了等號作為判斷條件,顯然這兒是不成立的,大抵已經(jīng)找到原因了。
activityType就是在這個if判斷語句中,被賦值為2的,即使在Mybatis的初始綁定值為3,那這么說的話,activityType不為null時,它的值會一直為2。
繼續(xù)往下面想,這個if語句的執(zhí)行順序,應(yīng)該是在執(zhí)行SQL查詢之前,那可以推斷的是,Mybatis在執(zhí)行SQL時,首先是先將所有的標簽轉(zhuǎn)化組裝為SQL,然后在執(zhí)行SQL語句。所以這里就已經(jīng)被賦錯了值。

解決辦法也特別簡單,就是再加一個=就可以了,標準的判斷語句而已。

補充 :mybatis的映射文件中,使用的是ognl表達式,所以在字符串進行判等的時候,可使用以下兩種方法

<if test="sex=='Y'.toString()">
或者
<if test = 'sex== "Y"'>

唯獨不能使用

<if test="sex=='Y'">

因為mybatis會把’Y’解析為字符,java是強類型語言,所以不能這樣寫。

總結(jié)

確實覺得很有意思,一個很小的錯誤,發(fā)生的那么不經(jīng)意,SQL不報錯,頁面也沒有錯誤,排查起來確實費了點心,以后寫代碼還是得多加注意呀?。?!

到此這篇關(guān)于Mybatis的if從句中的賦值烏龍的文章就介紹到這了,更多相關(guān)Mybatis if從句賦值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • hadoop中實現(xiàn)java網(wǎng)絡(luò)爬蟲(示例講解)

    hadoop中實現(xiàn)java網(wǎng)絡(luò)爬蟲(示例講解)

    下面小編就為大家?guī)硪黄猦adoop中實現(xiàn)java網(wǎng)絡(luò)爬蟲(示例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • springboot簡單集成Security配置的教程

    springboot簡單集成Security配置的教程

    這篇文章主要介紹了springboot簡單集成Security配置的教程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 關(guān)于java中線程安全問題詳解

    關(guān)于java中線程安全問題詳解

    最近工作中遇到不少多線程問題,但自己一直對多線程的理解比較表層,所以深入研究了一番,下面這篇文章主要給大家介紹了關(guān)于java中線程安全問題的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • java 終止線程的4種方式小結(jié)

    java 終止線程的4種方式小結(jié)

    本文主要介紹了java終止線程的4種方式小結(jié),包含布爾標志位,interrupt()方法,stop()方法和Thread.interrupt()方法,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • Spring Boot實現(xiàn)簡單的定時任務(wù)

    Spring Boot實現(xiàn)簡單的定時任務(wù)

    這篇文章主要給大家介紹了關(guān)于利用Spring Boot實現(xiàn)簡單的定時任務(wù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Spring Boot具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-07-07
  • 解決沒有@RunWith 和 @SpringBootTest注解或失效問題

    解決沒有@RunWith 和 @SpringBootTest注解或失效問題

    這篇文章主要介紹了解決沒有@RunWith 和 @SpringBootTest注解或失效問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • IDEA 2022 CPU占用100%的問題及解決方法

    IDEA 2022 CPU占用100%的問題及解決方法

    這篇文章主要介紹了IDEA 2022 CPU占用100%問題及解決方法,其實解決方法很簡單,只需要禁用三個插件然后重啟idea即可成功解決,需要的朋友可以參考下本文
    2022-08-08
  • IntelliJ?IDEA中如何使用Checkstyle對Java代碼規(guī)范檢查

    IntelliJ?IDEA中如何使用Checkstyle對Java代碼規(guī)范檢查

    這篇文章主要介紹了IntelliJ IDEA中如何使用Checkstyle對Java代碼規(guī)范檢查的相關(guān)資料,checkstyle是提高代碼質(zhì)量,檢查代碼規(guī)范的很好用的一款工具,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2026-03-03
  • SpringCloud?客戶端Ribbon負載均衡的實現(xiàn)方法

    SpringCloud?客戶端Ribbon負載均衡的實現(xiàn)方法

    Ribbon 是 Netflix 提供的一個基于 Http 和 TCP 的客戶端負載均衡工具,且已集成在 Eureka 依賴中,這篇文章主要介紹了SpringCloud?客戶端Ribbon負載均衡的實現(xiàn)方法,需要的朋友可以參考下
    2022-06-06
  • Java中替代equals,compareTo和toString的方法

    Java中替代equals,compareTo和toString的方法

    這篇文章主要介紹了Java中替代equals,compareTo和toString的方法,文中代碼十分詳細,幫助大家更好的理解的學習,感興趣的朋友可以了解下
    2020-06-06

最新評論

晋中市| 淮阳县| 清水河县| 绥德县| 三门峡市| 竹山县| 桓台县| 南江县| 城固县| 那坡县| 滨州市| 逊克县| 固阳县| 永寿县| 年辖:市辖区| 阿城市| 沁水县| 泽库县| 定结县| 吴忠市| 登封市| 凉城县| 巴南区| 乌拉特中旗| 文安县| 岳池县| 海林市| 雷州市| 时尚| 莱阳市| 额敏县| 高州市| 西藏| 通山县| 吉木萨尔县| 祥云县| 积石山| 句容市| 常宁市| 堆龙德庆县| 安图县|