mybatis中的多重if?條件判斷
mybatis 多重if 條件判斷
要注意的是
當(dāng)指定某種情況的時(shí)候,條件需要添加 toString() 方法
mybatis常用判斷語(yǔ)法(標(biāo)簽)
作為java開(kāi)發(fā),我們常用的判斷有if、switch語(yǔ)句,其實(shí)在MyBatis中也有對(duì)應(yīng)的標(biāo)簽,用于動(dòng)態(tài)生成sql語(yǔ)句。
if判斷
<where> ? ? <if test="null != statusCode and 0 != statusCode"> ? ? ? ? AND b.STATUS_CODE = #{statusCode, jdbcType=VARCHAR} ? ? </if> </where>
一般來(lái)說(shuō),很多程序猿朋友會(huì)在<if>標(biāo)簽前增加WHERE 1=1語(yǔ)句,但其實(shí)只需要像上面代碼中增加<where>標(biāo)簽包裹所有<if>語(yǔ)句,<if>內(nèi)語(yǔ)句前面都有and或者or關(guān)鍵字就行:
- MyBatis會(huì)自動(dòng)判斷所有條件不滿足時(shí),不添加where語(yǔ)句;
- 如果有多判斷語(yǔ)句,并且滿足一個(gè)條件以上時(shí),會(huì)把第一條滿足的(如果第一條有and或者or關(guān)鍵字時(shí))and或者or關(guān)鍵字刪除;
choose判斷
<choose> ?? ?<when test="5 == queryType"> ?? ??? ?CASE WHEN statusCode IN (1,6) THEN 1 ELSE 2 END,createTime DESC ?? ?</when> ?? ?<when test="1 != queryType and 9 != queryType"> ?? ??? ?createTime DESC ?? ?</when> ?? ?<otherwise> ?? ??? ?<choose> ?? ??? ??? ?<when test="null == orderType or 1 == orderType"> ?? ??? ??? ??? ?auditTime ?? ??? ??? ?</when> ?? ??? ??? ?<when test="2 == orderType"> ?? ??? ??? ??? ?downloadCount ?? ??? ??? ?</when> ?? ??? ??? ?<when test="3 == orderType"> ?? ??? ??? ??? ?browseCount ?? ??? ??? ?</when> ?? ??? ??? ?<otherwise> ?? ??? ??? ??? ?is666Count ?? ??? ??? ?</otherwise> ?? ??? ?</choose> ?? ??? ?<if test="null == orderMode or 1 == orderMode"> ?? ??? ??? ?DESC ?? ??? ?</if> ?? ?</otherwise> </choose>
上面的代碼使用了標(biāo)簽嵌套特性,用于復(fù)雜條件判斷。
choose判斷跟if else語(yǔ)句作用相同,起到根據(jù)條件執(zhí)行不同分支邏輯的作用。
而otherwise跟多個(gè)if else中最后一個(gè)else的作用相同,在以上條件都不滿足時(shí),執(zhí)行otherwise中的邏輯。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java如何刪除以逗號(hào)隔開(kāi)的字符串中某一個(gè)值
這篇文章主要介紹了java如何刪除以逗號(hào)隔開(kāi)的字符串中某一個(gè)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06MyBatis超詳細(xì)講解如何實(shí)現(xiàn)分頁(yè)功能
MyBatis-Plus?是一個(gè)?Mybatis?增強(qiáng)版工具,在?MyBatis?上擴(kuò)充了其他功能沒(méi)有改變其基本功能,為了簡(jiǎn)化開(kāi)發(fā)提交效率而存在,本篇文章帶用它實(shí)現(xiàn)分頁(yè)功能2022-03-03SpringBoot集成WebSocket遇到的問(wèn)題及解決
這篇文章主要介紹了SpringBoot集成WebSocket遇到的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2023-07-07springboot 使用logback啟動(dòng)報(bào)警報(bào)錯(cuò)的解決
這篇文章主要介紹了springboot 使用logback啟動(dòng)報(bào)警報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Springboot項(xiàng)目中定時(shí)任務(wù)的四種實(shí)現(xiàn)方式詳解
Spring的@Scheduled注解是一種非常簡(jiǎn)單和便捷的實(shí)現(xiàn)定時(shí)任務(wù)的方式,通過(guò)在方法上添加@Scheduled注解,我們可以指定方法在特定的時(shí)間間隔或固定的時(shí)間點(diǎn)執(zhí)行,本文給大家介紹Springboot項(xiàng)目中定時(shí)任務(wù)的四種實(shí)現(xiàn)方式,感興趣的的朋友一起看看b2024-02-02