Mybatis的使用注意事項和出錯的一些總結
阿新 • • 發佈:2019-01-27
為什麼會出現這種原因:1.我設定的引數型別是map型別的,結果我傳遞的時候,以為需要一個引數,就傳遞了一個字串;(我按照字串的方式進行傳遞,就穿了一個字串,實際需要map)
<select id="find_count" parameterType="map" resultType="int"> select count(*) from t_user <if test="username!=null"> where (username like #{username} or nickname like #{username}) </if> </select>
2.在發現上述問題之後,我parameterType的型別改為string型別,接著使用username作為引數進行使用,如下所示:很顯然不知道這個string裡面的username;
<select id="find_count" parameterType="string" resultType="int"> select count(*) from t_user <if test="username!=null"> where (username like #{<span style="font-family: Arial, Helvetica, sans-serif;">username</span>} or nickname like #{username}) </if> </select>
問題分析:Mybatis預設採用ONGL解析引數,所以會自動採用物件樹的形式取string.tj值,引起報錯。
解決方法: public List methodName(@Param(value="tj") String tj);說明引數值。
我的解決方法:把username改為_parameter
最後總結:
1.在只傳遞一個引數的情況下,如果不需要判斷值是否為空,可以使用username,不必使用 _parameter
但是在需要判斷是否為空的時候,就需要使用_parameter;<select id="loadByUsername" resultType="User" parameterType="string"> select * from t_user <!-- <if test="username!=null"> --> where username=#{username} <!-- </if> --> </select>
2.無論多少引數,統統傳遞一個map過去,可以解決這個問題;