搜尋

首頁  >  問答  >  主體

java - MyBatis拼接sql语句,如果判断空格呢?????

是这样,最近有个需求是,如果用户在搜索框里面输入的是一个空格那就搜索值为空的数据,但是我在mybatis里面写if判断,总是不生效求大神帮忙看下,屁话少说,我上代码!

        <if test="orderRemark !=null and orderRemark !=''">
            and a.order_Remark like '%${orderRemark}%'
        </if>

传入一个空字符串(没有空格),翻译出来的sql语句是,and a.order_Remark like '%%'
然后我又改了下

    <if test="orderRemark !=null and orderRemark !=''">
            <choose>
                <when test="orderRemark==' '">
                    and a.order_Remark like ='' or a.order_Remark is null
                </when>
                <otherwise>
                    and a.order_Remark like '%${orderRemark}%'              
                </otherwise>
            </choose>
        </if>

这时候我传进去一个带有空格的字符串
翻译出来的是 and a.order_Remark like '% %'
既然第二个已经有空格了,为什么没进when的判断呢?????
求大神帮忙啊!!!!!!!!!!!!!!!

巴扎黑巴扎黑2845 天前608

全部回覆(3)我來回復

  • 巴扎黑

    巴扎黑2017-04-17 13:52:26

    你可以在傳參數之前用trim()方法去掉空格,這樣在mybatis裡就不需要再判斷了

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 13:52:26

    查了百度,google還真沒搜到這個問題。
    遂自己嘗試解決方案,剛開始測試時發現如果是在xml的when中判斷一個空格(' ')判斷不出,但是判斷兩個空格就能判斷的出。
    當時覺得很奇怪,於是想是不是單引號的鍋子。轉念一想單引號在java中是表示字元的,怎麼能和字串相比較呢。於是我在一個空格(' ')後面加了toString(),像這樣 <when test="orderRemark==' '.toString()">這樣就可以了。
    所以我猜想是一個空格的時候預設是字符,兩個空格以上就會轉成字串。自己的猜想,望指正。

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 13:52:26

    如果這個很麻煩,就在java程式碼裡面做個判斷,或是判斷為空,直接用個特殊字符吧,別判斷空字符,要變通

    回覆
    0
  • 取消回覆