1. 程式人生 > >Mybatis的使用注意事項和出錯的一些總結

Mybatis的使用注意事項和出錯的一些總結

為什麼會出現這種原因: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

  <select id="loadByUsername"  resultType="User" parameterType="string">
  	select * from t_user 
  		<!-- <if test="username!=null"> -->
			where username=#{username}
		<!-- </if> -->
  </select>
但是在需要判斷是否為空的時候,就需要使用_parameter;

2.無論多少引數,統統傳遞一個map過去,可以解決這個問題;