Mybatis if 標簽 判斷不生效


問題場景

需求如下:需要根據傳入的單個字符串進行判斷

select * 
<if test="type == '1'">
    from user a
</if>
<if test="type == '2'">
    from app-user a
</if>

在此時物料type傳遞"1"還是"2",這個<if>都不會生效,還會報錯。

原因分析

是mybatis是用OGNL表達式來解析的,在OGNL的表達式中,'1'或'2'這種類的都會被解析成字符,而java又是強類型的,字符和單個字符串是不相等的,故會導致兩邊的類型不等,因此<if>標簽中的sql不會被解析。要想相等,必須兩邊都是相同的類型。

解決方案

解決方法有三種,分別如下:

1)將單引號換為雙引號

把test的引號換成單引號,里面的判斷換成雙引號即可。

select * 
<if test='type == "1"'>
    from user a
</if>
<if test='type == "2"'>
    from app-user a
</if>

2)使用toString強轉

把字符類型使用toString()方法強轉為字符串類型

select * 
<if test="type == '1'.toString()">
    from user a
</if>
<if test="type == '2'.toString()">
    from app-user a
</if>

3)將字符換成Integer類型

在傳遞參數時就傳遞Integer類型,使用Integer類型進行判斷

select * 
<if test="type == 1">
    from user a
</if>
<if test="type == 2">
    from app-user a
</if>

 推薦使用第一種或第三種方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM