oracle + mybatis 自增 id的的配置

  大过年的还要敲代码,想想也是醉人。今天忙着赶毕设,在做功能测试的时候发现id的值一直为0,一看就知道id的值没有自增,一直默认为0了。于是去百度了一番,默默调试,找到下面这段代码: 

  <selectKey keyProperty="id" resultType="int" order="BEFORE">
    SELECT SEQ_RESULT_ID.nextval as id FROM DUAL
  </selectKey>

  这段代码的意思是,通过获取序列内的值作为你要设置的id值,DUAL是一个oracle的虚拟表,可以存储你创建的序列即senquence,百度上的很多文章只说明了用这段代码就可以配置自增id,可是都没提到序列  SEQ_RESULT_ID 怎么创建,还得自己去另外百度,于是我又得到下面的代码:  

  CREATE SEQUENCE SEQ_RESULT_ID increment by 1 start with 1

  (创建序列 SEQ_RESULT_ID ,序列名自拟,每次select一次后,序列值+1,第一个值从1开始,即id的取值顺序会是1,2,3........)
  SELECT SEQ_RESULT_ID.nextval  as id  FROM DUAL

  (获取序列值作为id值,获取后序列值+1) 
  drop SEQUENCE SEQ_RESULT_ID;

  (删除序列)

  我们要配置序列的话,主要用的上面第一句,创建序列,记住start with 后面跟的值要小心,不能设成跟自己建的表里已有的id重复,有的人可能在创建数据库表的时候直接往里面塞了几个测试数据,由于id的唯一约束,如果id重复插入时就会报约束唯一的错误提示。如果配错的话就可以用第三句删掉序列重新创建。

  下面再配上我的完整insert代码:

<insert id="add" parameterType="Result">
  insert into RESULT(
  ID,INTRODUCED_NAME,STAFF_NAME,SELECTION,FIRST,SECOND,DECISION,FINALL)
  values(
  #{id,jdbcType=INTEGER},
  #{introducedName,jdbcType=VARCHAR},
  #{staffName,jdbcType=VARCHAR},
  #{selection,jdbcType=VARCHAR},
  #{first,jdbcType=VARCHAR},
  #{second,jdbcType=VARCHAR},
  #{decision,jdbcType=INTEGER},
  #{finall,jdbcType=INTEGER}
  )
  <selectKey keyProperty="id" resultType="int" order="BEFORE">
  SELECT SEQ_RESULT_ID.nextval as id FROM DUAL
  </selectKey>
</insert>

写这篇文章一是为了给自己加深印象,特别是序列的运用,二是给跟我一样纠结在oracle id自增上几个小时的朋友一个获取方法的途径,select和create我竟然傻傻分不清楚的一直以为序列不需要自己创建的,等到朋友提醒才想到去查序列创建的方法,面对“序列不存在”的错误提示竟然迷糊不清,可能是太困了。。。

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。