• 关于Sequence主键的数据库来说,如:

    • <insert id="add" parameterType="vo.Category">

      <selectKey resultType="java.lang.Short" order="BEFORE" keyProperty="id">

      SELECT SEQ_TEST.NEXTVAL FROM DUAL

      </selectKey>

      insert into category (name_zh, parent_id,

      show_order, delete_status, description

      )

      values (#{nameZh,jdbcType=VARCHAR},

      #{parentId,jdbcType=SMALLINT},

      #{showOrder,jdbcType=SMALLINT},

      #{deleteStatus,jdbcType=BIT},

      #{description,jdbcType=VARCHAR}

      )

      </insert>

  • 自增主键的表,插入时不需要主键,而是在插入过程中获取一个自增的主键,如:
    • <insert id="add" parameterType="vo.Category" useGeneratedKeys="true" keyProperty="id">

      insert into category (name_zh, parent_id,

      show_order, delete_status, description

      )

      values (#{nameZh,jdbcType=VARCHAR},

      #{parentId,jdbcType=SMALLINT},

      #{showOrder,jdbcType=SMALLINT},

      #{deleteStatus,jdbcType=BIT},

      #{description,jdbcType=VARCHAR}

      )

      </insert>

      或者

      <insert id="add" parameterType="vo.Category">

      <selectKey resultType="java.lang.Short" order="AFTER" keyProperty="id">

      SELECT LAST_INSERT_ID() AS id

      </selectKey>

      insert into category (name_zh, parent_id,

      show_order, delete_status, description

      )

      values (#{nameZh,jdbcType=VARCHAR},

      #{parentId,jdbcType=SMALLINT},

      #{showOrder,jdbcType=SMALLINT},

      #{deleteStatus,jdbcType=BIT},

      #{description,jdbcType=VARCHAR}

      )

      </insert>    注意:keyProperty="id" 这个id必须是实体的id,而不是数据表的主键id,否则,得不到正确的返回结果;接收返回值的时候必须用实体的get属性,而不能定义变量,否则,接收不到正确的返回结果:即必须用user.getId()来接收。例如int insertAndGetId = pgyMemUserService.insertAndGetId(user);

      System.out.println(user.getId());

  • 数据库表的主键不是自增的类型,一般需要应用层通过代码生成主键。也可以在数据库中生成如下:
    •   下面是针对Oracle的写法,Oracle没有autoincrement,而是用触发器实现的 CURRVAL是在触发器中定义的.
      <insert id="insert" parameterClass="ProFeeKindObject">
            <![CDATA[
               INSERT INTO t_pro_feeKind (KINDID,kindName,kindType,enable)
               VALUES (seq_t_pro_feekind_id.nextval,#kindName#,#kindType#,#enable#)
              ]]>
              <selectKey resultClass="java.lang.Integer" keyProperty="kindId" >
              SELECT seq_t_pro_feekind_id.CURRVAL AS kindId FROM DUAL
              </selectKey>    
      </insert>

      <!-- 下面是针对MySQL的写法 -->
      <!--
         <selectKey resultClass="int" keyProperty="id" >
         SELECT @@IDENTITY AS id
         </selectKey>
      -->

关于mybatis插入数据库返回主键id的更多相关文章

  1. Java MyBatis 插入数据库返回主键

    最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...

  2. Java MyBatis 插入数据库返回主键--insertSelective这样就不用每次到数据库里面查询了

    insertSelective---Java MyBatis 插入数据库返回主键--insertSelective这样就不用每次到数据库里面查询了 https://www.cnblogs.com/xi ...

  3. MyBatis 插入数据库返回主键

    最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...

  4. mybatis插入是返回主键id

    <!-- 插入数据:返回记录的id值 --> <insert id="insertOneTest" parameterType="org.chench. ...

  5. mybatis插入数据库 返回主键

    传递参数为对象TaskEntity, 返回主键结果为Integer 与 主键 task_id 的类型一致即可 <insert id="addTask" parameterTy ...

  6. Mybatis插入数据返回主键ID

    <insert id="add" parameterType="com.dsa.core.base.model.ProductSync">      ...

  7. mybatis与mysql插入时返回主键id的值

    <insert id="insertCharge" parameterType="com.bb.bean.Rechargerecord"> < ...

  8. 使用mybatis插入自增主键ID的数据后返回自增的ID

    在开发中碰到用户注册的功能需要用到用户ID,但是用户ID是数据库自增生成的,这种情况上网查询后使用下面的方式配置mybatis的insert语句可以解决: <insert id="in ...

  9. MyBatis框架——mybatis插入数据返回主键(mysql、oracle)

    向数据库中插入数据时,大多数情况都会使用自增列或者UUID做为主键.主键的值都是插入之前无法知道的,但很多情况下我们在插入数据后需要使用刚刚插入数据的主键,比如向两张关联表A.B中插入数据(A的主键是 ...

随机推荐

  1. 华为 oj 公共子串计算

    水题,原来以为用dp数组  结果wrong了两次 我想还是自己小题大做了···呵呵·· 献给初学者作为参考 #include <stdio.h> #include <string.h ...

  2. poj3614 贪心

    Sunscreen Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6410   Accepted: 2239 Descrip ...

  3. hdu 2191多重背包

    悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...

  4. vc远程调试启动进程(非attach)

    被调试端设置同attach进程方式的远程调试 代码端,需要在[Project] [Properties] [Configuration Properties] [Debugging].将Debugge ...

  5. python列表sort方法的两个参数key, reverse

    使用列表的sort方法可以进行排序,其中有两个参数用来表示排序的方式,代码: In [7]: a = ['x11','abc323','e26','112ddd'] In [8]: a.sort(ke ...

  6. 第一个程序 - Windows程序设计(SDK)001

    愉快的开始 让编程改变世界 Change the world by program 编译器安装 我们经常说的 VS 指的就是 Microsoft Visual Studio 的简称,它是微软开发工具的 ...

  7. angular--bootstrap实例日期控件【datepicker】

    head部分: <!--Bootstrap--> <link rel="stylesheet" href="/supProdom/script/boot ...

  8. ng-repeat-start ng-repeat-end 的使用

    ng-repeat-start与ng-repeat-end时AngularJS(1.2.x)扩展的, 使用这两个指令可以灵活控制遍历形式. 例如: index.html <div class=& ...

  9. 使用StreamReader与StreamWriter进行文本文件读写

    namespace filetest { class FileUtil { public static void WriteFile(string file) { using (FileStream ...

  10. PowerShell_零基础自学课程_6_PS中获取帮助信息详解、管道、格式化输

    前些文章陆续的说了一些关于这些主题,但是讨论的都不够深入,今天我们深入的了解一下获取帮助信息.管道以及格式化输出的内容. 一.获取帮助信息 在PS中获取帮助信息,最常用的有: -? .get-comm ...