1. 程式人生 > >MyBatis3錯誤:Parameter 'id' not found. Available parameters are [arg2, arg1, arg0, param3, param1, par

MyBatis3錯誤:Parameter 'id' not found. Available parameters are [arg2, arg1, arg0, param3, param1, par

  這個問題涉及到MyBatis3在使用select節點查詢時傳遞多個引數的問題。問題分析如下:

  1、如果是單個查詢一般是這樣配置:

 <select id="getUserArticles" parameterType="int" resultMap="resultUserArticleList">
        select user.id,user.userName,user.userAddress,article.id as aid,article.title,article.content from user,article where user.id=article.userid
and user.id=#{id} </select>
public List<Article> getUserArticles(int id);

  2、如果使用了多個引數之後,我們一般是這樣配置:

 <select id="getUserArticlesByLimit" parameterType="int" resultMap="resultUserArticleList">
        select user.id,user.userName,user.userAddress,article.id as aid,article.title
,article.content from user,article where user.id=article.userid and user.id=#{id} limit #{start},#{limit} </select>
public List<Article> getUserArticlesByLimit(int id,int start,int limit);

  而以上寫法有兩個錯誤的地方,第一個是parameterType是要去掉的,雖然這裡的引數全部都是int型別,如果涉及多個型別那就必須去掉;第二個是#{id}…及後面的引數寫法也是錯誤的,因為在MyBatis3中不會識別這樣的引數,所以應該改成#{arg0},{arg1}這樣的形式。

  所以,修改後的配置如下:

<select id="getUserArticlesByLimit" resultMap="resultUserArticleList">
        select user.id,user.userName,user.userAddress,article.id as aid,article.title,article.content from user,article where user.id=article.userid and user.id=#{arg0} limit #{arg1},#{arg2}
    </select>

  通過以上修改完後,錯誤解決。

  3、當然,這個涉及到了MyBatis3的多引數查詢方法,還有很多解決方法,比如使用HashMap型別、對引數進行@Param註解、使用物件傳輸等的引數進行裝載,詳細參考:http://www.cnblogs.com/mingyue1818/p/3714162.html


  這個世界上沒有知識是學不會的,不是嗎?如果一開始學不會,就可以把問題細化分解,然後學習更基本的知識。最後,所有問題都能變得和1+1=2一樣簡單,我們需要的只是時間。好了,最後給大家推薦一個學習Java的好網站JAVA自學網站–how2j.cn