一、场景:

插入数据库的值需要立即得到返回的主键id进行下一步程序操作

二、解决方法:

第一种:使用通用mapper的插入方法

Mapper.insertSelective(record);

此方法:插入一条数据,只插入不为null的字段,不会影响有默认值的字段
支持Oracle序列,UUID,类似Mysql的INDENTITY自动增长(自动回写)
优先使用传入的参数值,参数值空时,才会使用序列、UUID,自动增长

controller的实际应用:使用方法id会直接将映射到参数的实体上使用时直接使用参数的实体get获取值

通用mapper相关配置查看其它文章   http://blog.csdn.net/isea533/article/details/41457529

第二种:编写sql语句

dao层方法:

  1. /**
  2. * 插入数据库并返回主键id
  3. * @param batch
  4. * @return
  5. */
  6. Integer insertBatchReturnId(Batch batch);

xml的sql语句写法

记得加上useGeneratedKeys和keyProperty配置即可,前者是指设置是否使用jdbc的getGenereatedKeys方法获取主键并赋值到keyProperty设置的属性中,后者即实体类主键字段(并且大小写要对应上)

  1. <insert id="insertBatchReturnId" useGeneratedKeys="true" keyProperty="id" parameterType="org.uz.dxt.model.bankbase.Batch"  >
  2. insert into t_batch (
  3. batchCode,
  4. bankCode,
  5. bizType,
  6. companyCode,
  7. wtEndDate,
  8. wtDate,
  9. contractId,
  10. totalCount,
  11. totalBase,
  12. handCode)
  13. values
  14. ( #{batchcode},
  15. #{bankcode},
  16. #{biztype},
  17. #{companycode},
  18. #{wtenddate},
  19. #{wtdate},
  20. #{contractid},
  21. #{totalcount},
  22. #{totalbase},
  23. #{handCode})
  24. </insert>

controller的实际应用:使用方法id会直接将映射到参数的实体上使用时直接使用参数的实体get获取值

  1. batchService.insertBatch(param);//实体
  2. idlist.add(param.getId());

第三种:sql语句使用<selectKey>获取自增逐渐id

  1. <insert id="add" parameterType="EStudent">
  2. // 下面是SQLServer获取最近一次插入记录的主键值的方式
  3. <selectKey resultType="_long" keyProperty="id" order="AFTER">
  4. select @@IDENTITY as id
  5. </selectKey>
  6. insert into TStudent(name, age) values(#{name}, #{age})
  7. </insert>

使用用法同上

这里推荐使用第一种和第二种中方法

第三种方法对oracl额外的配置

controller的实际应用:使用方法id会直接将映射到参数的实体上使用时直接使用参数的实体get获取值

Mybatis+Mysql插入数据库返回自增主键id值的三种方法的更多相关文章

  1. Mybatis:插入数据返回自增主键

    使用Mybatis作为工具连接MySQL,要求在插入数据之后返回自增主键 一开始也很迷惑,Mybatis使用insert之后,成功返回的是1,失败会报错或返回0,主键去哪找来 后来知道Mybatis可 ...

  2. mybatis插入数据后返回自增主键ID详解

    1.场景介绍: ​ 开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后 ...

  3. Mybatis 中获取添加的自增主键ID(针对mysql)

    分享一篇博客,主要就是针对在我们使用SSM的时候,在.xml中获取<insert></insert> 时的自增主键Id,由于好久没有,这个时候使用,有点生疏,就在这里写个笔记, ...

  4. mybaits返回自增主键ID

    mybaits两种获取自增主键ID的方法:一种是使用useGeneratedKeys,第二种是selectKey方法获取. useGeneratedKeys <insert id="i ...

  5. Mybatis学习笔记4 - 获取自增主键的值

    获取自增主键的值:mysql支持自增主键,自增主键值的获取,mybatis也是利用statement.getGenreatedKeys():useGeneratedKeys="true&qu ...

  6. Mybatis插入数据返回自增主键

    方法有很多,参考 mysql函数之六:mysql插入数据后返回自增ID的方法,last_insert_id(),selectkey 这里记录一下工作中自己用到的selectkey方法的详细过程. po ...

  7. 数据库插入数据返回当前自增主键ID值的方法

    当我们插入一条数据的时候,我们很多时候都想立刻获取当前插入的主键值返回以做它用.我们通常的做法有如下几种: 1. 先 select max(id) +1 ,然后将+1后的值作为主键插入数据库: 2. ...

  8. mybatis插入操作时,返回自增主键id

    mapper.xml 代码 <insert id="insert" parameterType="com.Student" > <select ...

  9. MyBatis 插入时返回自增主键

    XML <insert id="insert" parameterType="com.stone.model.Person"> <!-- se ...

随机推荐

  1. MySQL之表的数据类型

    一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob.com/mysql/mysql-data ...

  2. JVM笔记1-内存溢出分析问题与解决

    假设我们项目中JVM内存溢出了,大项目中上百万行代码,是很难定位的.因此我们需要借用一个Memory Analyzer工具, 官网地址为:http://www.eclipse.org/download ...

  3. C语言拼接字符串以及进制转换

    #include<stdio.h> #include<stdlib.h> #include<string.h> char *join1(char *, char*) ...

  4. Linux基础六

    用户账号管理 基于账号身份对资源访问进行控制 账户类别:用户账号,组账号 识别方式:UID,GID 用户账号:超级用户root,系统用户,普通用户 组账号:用来区分权限,不用于登陆 基本组(私有组) ...

  5. 子沐代码段——Flask+Mysql+Echarts可视化

    前言 子沐不久前,使用Scrapy爬取了智联招聘的职位数据,并部署到服务器上,设置了定时任务.数据量日益庞大.子沐在想,数据不过只是存在数据库里,并没有什么意义,所以子沐萌发一个想法,那就是做一个可视 ...

  6. MySQL参数log_bin_trust_function_creators介绍

    MySQL的有个参数log_bin_trust_function_creators,官方文档对这个参数的介绍.解释如下所示: log_bin_trust_function_creators Comma ...

  7. 修正uboot网络不可用

    通过使用uboot的网络功能可以更新ubook,烧写内核,文件系统,如果网络功能不可能,那还不如同变砖了一样.当然如果支持sd卡启动,可能通过sd卡完成这些功能,但是也太过麻烦了.飞凌的6410开发板 ...

  8. AFDX总线协议规范

    AFDX总线协议规范 1.概述 2. AFDX简介 3.AFDX的在数据传输性能的改进 3.1 AFDX以太网帧格式 3.2 AFDX以太网冗余备份 3.3 虚拟连接 3.4 数据交换处理 4.航空计 ...

  9. phpexcle 导出数据 日期格式的问题

    在使用phpexcle 读取excle中日期格式的出现了问题.特此记录 gmdate("Y-m-d H:i:s", PHPExcel_Shared_Date::ExcelToPHP ...

  10. Dictionary排序

    有时候由于某些要求会对Dictionary排序,一般有两种方法. 1.使用SortedDictionary. 这种自动会对保存的值进行排序. static void Main(string[] arg ...