<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Steven

    You're?still?young --that's?your?fault

     

    【解決】【 MyBatis 】使用MyBatis批量增加,出現 Parameter '__frch_item_0' not found. Available parameters are [list]

    異常信息:

    復制代碼
    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>
    復制代碼

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

     

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

     

    1.查看parameterType的類型是不是Java.util.List類型,如果是的話,看foreach 的collection屬性是不是list,

        因為 傳遞一個 List 實例或者數組作為參數對象傳給 MyBatis,MyBatis 會自動將它包裝在一個 Map 中,用名稱在作為鍵。List 實例將會以“list” 作為鍵,而數組實例將會以“array”作為鍵 

    2.看一下foreach里面的值有沒有傳遞進來 

    3.看foreach里面的名稱字段是否寫錯 

    4.還有就是我用Mybatis的時候,用MySQL的值插入自動增長值,里面的key我在數據庫中沒有設置自動增長,然后我又用了selectkey,所以也會出現這種情況


    應該還有別的錯誤能夠導致這個錯誤。但是我就只遇到這幾種。所以做個總結



    【可用例子】

        <!-- createEmergencyBatch:批量插入交接班 - 突發事件 關聯對象列表 -->
        <insert id="createEmergencyBatch" parameterType="java.util.List">
            INSERT INTO DUTY_CHANGE_DUTY_EMERGENCY
            (ID,EMERGENCY_ID,CHANGE_WORK_DUTY_ID,STATUS,CREATE_TIME)
            (
            <foreach collection="list" item="item" index="index" separator="union all">
                SELECT
                #{item.id,jdbcType=VARCHAR},
                #{item.emergencyId,jdbcType=VARCHAR},
                #{item.changeWorkDutyId,jdbcType=VARCHAR},
                #{item.status,jdbcType=VARCHAR},
                #{item.createTime,jdbcType=TIMESTAMP}
                FROM dual
            </foreach>
            )
        </insert>


    梅花香自苦寒來

    posted on 2017-05-09 08:09 wen.ding 閱讀(3968) 評論(0)  編輯  收藏 所屬分類: Exception

    導航

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费精品视频在线| 亚洲国产日韩一区高清在线| 亚洲一区在线免费观看| 91视频免费网址| 亚洲福利视频网站| 亚洲人成亚洲人成在线观看| 国产成人1024精品免费| 青青草原亚洲视频| 精品免费视在线观看| 日韩亚洲欧洲在线com91tv| 国产免费无码AV片在线观看不卡| 亚洲一区二区三区AV无码| 久久精品成人免费网站| 亚洲精品综合一二三区在线 | 亚洲av日韩av永久无码电影| 成人午夜免费福利| 精品女同一区二区三区免费播放| 免费一级做a爰片久久毛片潮喷| 看Aⅴ免费毛片手机播放| 免费一级成人毛片| 三年片免费观看大全国语| 无码乱人伦一区二区亚洲一| 亚洲免费视频播放| 色视频在线观看免费| 亚洲色自偷自拍另类小说| 4444www免费看| 国产亚洲欧美在线观看| 久久久久亚洲AV无码专区桃色| 永久免费不卡在线观看黄网站| 亚洲成aⅴ人片在线观| 日本19禁啪啪无遮挡免费动图| 春意影院午夜爽爽爽免费| 亚洲网站在线观看| 永久免费AV无码网站在线观看| 9久热这里只有精品免费| 亚洲免费观看网站| 国产成人A亚洲精V品无码| 欧美a级在线现免费观看| 本道天堂成在人线av无码免费| 亚洲视频在线免费观看| 免费一级国产生活片|