解決使用mybatis做批量操作時發生的異常:Parameter '__frch_item_0' not found. Available parameters are [list] 記錄


本文主要描述 使用mybatis進行批量更新、批量插入 過程中遇到的異常及總結:

首先貼出使用批量操作報的異常信息:

1 java.lang.RuntimeException: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter '__frch_item_0' not found. Available parameters are [list]
2 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter '__frch_item_0' not found. Available parameters are [list]
3     at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
4     at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:365)

 

最終查到導致異常的原因是 foreach中的屬性字段名字寫錯了!表字段太多,一個個找的還是很費勁的!建議這種做好單元測試!

另外,寫xml的時差錯,還可以從下面幾點檢查。

1、parameterType="Java.util.List",這個parameterType有沒有寫錯;

2、<foreach collection="list" item="item" index="index" open="" close="" separator=";">這行中,collection是不是List

關於批量更新做一個總結:

批量更新有兩種,一種是通過id更新很多字段,第二種是更改一列,值是固定的這種。下面分別貼出列子

例子:

更新一列:

1 <update id="batchUpdateResult" parameterType="java.util.List">    
2          update
3          <include refid="input_invoice_original_record" />
4        set isGet = 0 where invoiceNum in
5        <foreach collection="list" item="item" open="(" separator="," close=")">
6        #{item}
7        </foreach>
8 </update>

這種直接是item就行,只是一個查詢的條件范圍。

更新很多字段:

 1 <update id="batchUpdate" parameterType="list">
 2             <foreach collection="list" item="item" index="index" open="" close="" separator=";">
 3                   update
 4                   <include refid="input_invoice_original_record" />
 5                   <trim prefix="SET" suffixOverrides=",">
 6                         <if test="item.title != null">
 7                               title = #{item.title},
 8                         </if>
 9                         <if test="item.invoiceNum != null">
10                               invoiceNum = #{item.invoiceNum},
11                         </if>
12                         <if test="item.invoiceCode != null">
13                               invoiceCode = #{item.invoiceCode},
14                         </if>
15                         <if test="item.invoiceDate != null">
16                               invoiceDate = #{item.invoiceDate},
17                         </if>
18     
19                         </trim>
20                   WHERE id = #{item.id}
21             </foreach>
22       </update>
23     

注意,這種傳的是一個個的對象在list集合中,要加item.屬性名稱,空判斷的時候別忘記這種格式,這里我犯過錯,沒少費時間。

貼出來當時忘記加item的異常 信息:

1 java.lang.RuntimeException: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'title' not found. Available parameters are [list]
2 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'title' not found. Available parameters are [list]
3     at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
4     at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:365)

找這個問題用了不少時間!

 

下面說一下批量插入操作。

 1       <insert id="batchInsert" parameterType="java.util.List"
 2             useGeneratedKeys="true" keyProperty="id">
 3             <selectKey resultType="long" keyProperty="id" order="AFTER">
 4                   SELECT
 5                   LAST_INSERT_ID()
 6             </selectKey>
 7             INSERT INTO
 8             <include refid="input_invoice_original_record" />
 9             (
10             title ,
11             invoiceNum,
12             invoiceCode,
13             invoiceDate,
14             sellDate ,
15             invoiceCategory
16             )
17             VALUES
18             <foreach collection="list" item="item" index="index"
19                   separator=",">
20                   (
21                   #{item.title} ,
22                   #{item.invoiceNum},
23                   #{item.invoiceCode},
24                   #{item.invoiceDate},
25                   #{item.sellDate} ,
26                   #{item.invoiceCategory}
27                   )
28             </foreach>
29       </insert>

易錯點和批量更新一樣,寫的時候要仔細。

 

這里做一個總結,如果不正確之處,歡迎指正!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM