mybatis使用Integer類(lèi)型查詢(xún)可能出現(xiàn)的問(wèn)題
使用Integer類(lèi)型查詢(xún)出現(xiàn)的問(wèn)題
mapper.xml :
<select id="count" parameterType="com.pinyu.system.web.page.Page" resultType="java.lang.Integer">
?? ??? ?select count(m.id) from hr_push_msg_model as m
?? ??? ?<where>
?? ??? ??? ?<if test="page.keyword != null and page.keyword != ''">
?? ??? ??? ??? ?m.text like '%${page.keyword}%'
?? ??? ??? ?</if>
?? ??? ??? ?<if test="page.entity != null">
?? ??? ??? ??? ?<if test="page.entity.text != null and page.entity.text != ''">
?? ??? ??? ??? ??? ?and ?m.text like '%${page.entity.text}%'
?? ??? ??? ??? ?</if>
?? ??? ??? ??? ?<if test="page.entity.title != null and page.entity.title != ''">
?? ??? ??? ??? ??? ?and ?m.title like '%${page.entity.title}%'
?? ??? ??? ??? ?</if>
?? ??? ??? ??? ?<if test="page.entity.state != null and page.entity.state != ''">
?? ??? ??? ??? ??? ?and ?m.state = #{page.entity.state}
?? ??? ??? ??? ?</if>
?? ??? ??? ??? ?<if test="page.entity.type != null and page.entity.type != ''">
?? ??? ??? ??? ??? ?and ?m.type = #{page.entity.type}
?? ??? ??? ??? ?</if>
?? ??? ??? ?</if>
?? ??? ?</where>
?? ?</select>比如:
<if test="page.entity.state != null and page.entity.state != ''">
? ? ? ? ? ? ? ? ? ? and ?m.state = #{page.entity.state}
? ? ? ? ? ? ? ? </if>當(dāng)state這個(gè)值為0的時(shí)候
mybatis為默認(rèn)為空字符串"",所以如果狀態(tài)這種類(lèi)似的場(chǎng)景有0值得,查詢(xún)就不要加上x(chóng)xxx!=""這種?;蛘遫r xxx==0
代碼示例:
1、
<if test="page.entity.state != null">
? ? ?and ?m.state = #{page.entity.state}
</if>2、
<if test="page.entity.state != null and page.entity.state != '' or page.entity.state==0">
? ? and ?m.state = #{page.entity.state}
</if>mybatis判斷Integer遇到的bug
場(chǎng)景產(chǎn)出
需要查出狀態(tài)為0的所有用戶(hù)
我是這樣寫(xiě)的
1.mapper:
BaseUser selectUserByStatus(@parm("status") Integer status);這里傳了0進(jìn)去
2.sql:
SELECT * FROM base_user WHERE status=0
3.xml片段
<if test="status != null and status != ''">
status = #{status},
</if>4.結(jié)果真正執(zhí)行的sql
SELECT * FROM base_user
小結(jié)一下:
test="status != null and status != ''"這個(gè)是拿來(lái)判斷String的?。?!也就是說(shuō)Double,BigDecimal等數(shù)字類(lèi)型也會(huì)出現(xiàn)這樣的情況
1.如果是Integer類(lèi)型的話,如果變量的值是0,即 num = 0, mybatis在進(jìn)行 num != '' " 的時(shí)候會(huì)認(rèn)為 num 的值是空字符串;直接跳過(guò)判斷了
所以如果是Integer類(lèi)型只需要判斷 != null 即可
2.如果String類(lèi)型需要判斷不等于0,則需要寫(xiě)name != '0'.toString(),否則會(huì)報(bào)錯(cuò)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決Java Calendar類(lèi)set()方法的陷阱
這篇文章主要介紹了解決Java Calendar類(lèi)set()方法的陷阱,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
java加載properties文件的六種方法總結(jié)
這篇文章主要介紹了java加載properties文件的六種方法總結(jié)的相關(guān)資料,需要的朋友可以參考下2017-05-05
spring?boot?executable?jar/war?原理解析
spring boot里其實(shí)不僅可以直接以 java -jar demo.jar的方式啟動(dòng),還可以把jar/war變?yōu)橐粋€(gè)可以執(zhí)行的腳本來(lái)啟動(dòng),比如./demo.jar,這篇文章主要介紹了spring?boot?executable?jar/war?原理,需要的朋友可以參考下2023-02-02
SpringBoot處理JSON數(shù)據(jù)方法詳解
這篇文章主要介紹了SpringBoot整合Web開(kāi)發(fā)中Json數(shù)據(jù)處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-10-10
Java?CopyOnWriteArrayList源碼超詳細(xì)分析
為了將讀取的性能發(fā)揮到極致,jdk中提供了CopyOnWriteArrayList類(lèi),下面這篇文章主要給大家介紹了關(guān)于java中CopyOnWriteArrayList源碼解析的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11
Java多態(tài)中動(dòng)態(tài)綁定原理解析
這篇文章主要介紹了Java多態(tài)中動(dòng)態(tài)綁定原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12

