mybatis執行查詢語句查詢不到結果,控制檯輸出sql語句複製到資料庫中能查到資料

衣舞晨風發表於2016-07-22

今天用mybatis查詢語句的時候,控制檯輸出的sql語句可以在mysql中可以正確執行,但是查詢出來就是沒有資料。
原查詢語句如下(為展示問題明確,將sql進行了簡化):

<select id="getListByQueryValue" parameterType="Map" resultType="Map">
        SELECT
         *
        FROM
         province
        <where>
            <if test="strWhere != null and strWhere!= ''">
                AND ( #{strWhere} )
            </if>
        </where>
</select>

此sql可以在mysql中正確執行,但是查詢不到資料。
解決辦法是:將查詢條件中的“#”替換成“$”.
原因如下:
MyBatis看到 #{}會認為你在給sql中的變數賦值,就像JDBC程式設計中給問號賦值一樣(自動在前後加單引號)也就是說,他把你傳入的字串並沒有當做多個值,而是當做一個大的字串,所以查詢不到值

而MyBatis看到${}的時候會直接將之替換成變數的值而不做任何處理。

mybatis $ # 具體區別可以參考:這裡寫連結內容

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章