问题一20150509——mybatis的配置文件useGeneratedKeys属性(报java.lang.ArrayIndexOutOfBoundsException)

在Mybatis中,当使用useGeneratedKeys属性默认为true且实体已预设主键时,会导致java.lang.ArrayIndexOutOfBoundsException。设置useGeneratedKeys为false,可以避免自动生成主键,从而使用实体传递的主键值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在mybatis配置文件中的insert语句如下时

 <insert id="insert" parameterType="TBookmark" >
        insert into t_bookmark (BOOKMARK_ID, BOOKMARK_NAME, USER_ID, 
          CONTENT_ID, CHAPTER_ID, CHAPTER_NAME, 
          SECTION, PAGE, POSITION, 
          BOOKMARK_TYPE, BOOKMARK_CREATE_TIME, CONTENT_NAME, 
          SERIAL_NUM, BUSINESS_SORT_ID, BSSORT_NAME,BOOKMARK_SYSTEM_TIME
          )
        values (#{bookmarkId,jdbcType=DECIMAL}, #{bookmarkName,jdbcType=VARCHAR}, #{userId,jdbcType=DECIMAL}, 
          #{contentId,jdbcType=DECIMAL}, #{chapterId,jdbcType=DECIMAL}, #{chapterName,jdbcType=VARCHAR}, 
          #{section,jdbcType=DECIMAL}, #{page,jdbcType=DECIMAL}, #{position,jdbcType=DECIMAL}, 
          #{bookmarkType,jdbcType=VARCHAR}, #{bookmarkCreateTime,jdbcType=TIMESTAMP}, #{contentName,jdbcType=VARCHAR}, 
          #{serialNum,jdbcType=DECIMAL}, #{businessSortId,jdbcType=DECIMAL}, #{bssortName,jdbcType=VARCHAR},#{bookmarkSystemTime,jdbcType=TIMESTAMP}
          )

  </insert>

useGeneratedKeys的属性默认为true,也就是说主键用的是自动生成,这是当传进来的实体中TBookmark已设置了主键时,程序会报java.lang.ArrayIndexOutOfBoundsException,因为实体中有了主键,mybatis又自动帮我们生成了一个主键,属性值多出一个了,只要设置useGeneratedKeys属性为false,就用到了实体传进来的主键值了,如下

 <insert id="insert" parameterType="TBookmark" useGeneratedKeys="false">
        insert into t_bookmark (BOOKMARK_ID, BOOKMARK_NAME, USER_ID, 
          CONTENT_ID, CHAPTER_ID, CHAPTER_NAME, 
          SECTION, PAGE, POSITION, 
          BOOKMARK_TYPE, BOOKMARK_CREATE_TIME, CONTENT_NAME, 
          SERIAL_NUM, BUSINESS_SORT_ID, BSSORT_NAME,BOOKMARK_SYSTEM_TIME
          )
        values (#{bookmarkId,jdbcType=DECIMAL}, #{bookmarkName,jdbcType=VARCHAR}, #{userId,jdbcType=DECIMAL}, 
          #{contentId,jdbcType=DECIMAL}, #{chapterId,jdbcType=DECIMAL}, #{chapterName,jdbcType=VARCHAR}, 
          #{section,jdbcType=DECIMAL}, #{page,jdbcType=DECIMAL}, #{position,jdbcType=DECIMAL}, 
          #{bookmarkType,jdbcType=VARCHAR}, #{bookmarkCreateTime,jdbcType=TIMESTAMP}, #{contentName,jdbcType=VARCHAR}, 
          #{serialNum,jdbcType=DECIMAL}, #{businessSortId,jdbcType=DECIMAL}, #{bssortName,jdbcType=VARCHAR},#{bookmarkSystemTime,jdbcType=TIMESTAMP}
          )

  </insert>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值