zoukankan      html  css  js  c++  java
  • Mybatis中自动生成主键在mysql和Oracle当中的情况

         Mybatis中自动生成主键

            在INSERT语句中,我们为可以自动生成(auto-generated)主键的列 STUD_ID 插入值。我们可以使用useGeneratedKeys和keyProperty属性让数据库生成auto_increment列的值,并将生成的值设置到其中一个输入对象属性内,如下所示:                 
    1.  
      <insert id="insertStudent" parameterType="Student" useGeneratedKeys="true" keyProperty="studId">
    2.  
      INSERT INTO STUDENTS(NAME, EMAIL, PHONE) VALUES(#{name},#{email},#{phone})
    3.  
      </insert>
            这里STUD_ID列值将会被数据库自动生成(如mysql),并且生成的值会被设置到student对象的studId属性上。  
            但是有些数据库如Oracle并不支持AUTO_INCREMENT列,其使用序列(SEQUENCE)来生成主键值。假设我们有一个名为my_seq的序列来生成SUTD_ID主键值。使用如下代码来生成主键:
            drop sequence my_seq;
            create sequence my_seq;
    1.  
      <insert id="insertStudent" parameterType="Student">
    2.  
      <selectKey keyProperty="studId" resultType="int" order="BEFORE">
    3.  
      SELECT my_seq.nextval FROM DUAL
    4.  
      </selectKey>
    5.  
      INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL, PHONE)
    6.  
      VALUES(#{studId},#{name},#{email},#{phone})
    7.  
      </insert>        
    8.  
       
            这里我们使用了<selectKey>子元素来生成主键值,并将值保存到Student对象的studId 属性上。属性order=“before”表示MyBatis将取得序列的下一个值作为主键值,并且在执行INSERT语句之前将值设置到studId属性上。  
            注:SelectKey需要注意order属性,像MySQL、SQLServer等一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。

            像Oracle这样取序列的情况,需要设置为before,否则会报错。

    来自:https://blog.csdn.net/suwu150/article/details/52895855

  • 相关阅读:
    P4097 [HEOI2013]Segment(李超线段树模板)
    P2155 [SDOI2008]沙拉公主的困惑
    BZOJ3675 [Apio2014]序列分割[斜率优化dp]
    hdu4261 Estimation[暴力dp+对顶堆]
    poj2374 Fence Obstacle Course[线段树+DP]
    poj1463 Strategic game[树形DP]
    CH5E02 [IOI1999]花店橱窗[暴力dp]
    CH5E01[NOIP2010] 乌龟棋[暴力]
    CH5702 Count The Repetitions[倍增dp]
    P1081 [NOIP2012]开车旅行[倍增]
  • 原文地址:https://www.cnblogs.com/flyfishing1991/p/14278805.html
Copyright © 2011-2022 走看看