原文地址

【推荐阅读】微服务还能火多久?>>>

我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键:

1、对于支持生成自增主键的数据库:增加 useGenerateKeys和keyProperty ,<insert>标签属性。

2、不支持生成自增主键的数据库:使用<selectKey>。

<insert id="insertAuthor" useGeneratedKeys="true"keyProperty="id">insert into Author (username, password, email, bio) values<foreach item="item" collection="list" separator=",">(#{item.username}, #{item.password}, #{item.email}, #{item.bio})</foreach>
</insert>

从官网资料可以看出Mybatis是支持批量插入时返回自增主键的。

但是在本地测试的时候使用上述方式确实不能返回自增id,而且还报错(不认识keyProperty中指定的Id属性),然后在网上找相关资料。终于在Stackoverflow上面找到了一些信息。

解决办法:

1、升级Mybatis版本到3.3.1。官方在这个版本中加入了批量新增返回主键id的功能

2、在Dao中不能使用@param注解。

3、Mapper.xml中使用list变量(parameterType="Java.util.List")接受Dao中的参数集合。

下面是具体代码过程,可供参考

mapper.xml层代码

<!-- 批量新增 -->  <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id" >  INSERT INTO  <include refid="t_shop_resource" />  (relation_id, summary_id, relation_type)  VALUES  <foreach collection="list" index="index" item="shopResource" separator=",">  (  #{shopResource.relationId}, #{shopResource.summaryId}, #{shopResource.relationType}  )  </foreach>  </insert>

dao实现层代码

public List<ShopResource> batchinsertCallId(List<ShopResource> shopResourceList){  this.getSqlSession().insert(getStatement(SQL_BATCH_INSERT_CALL_ID), shopResourceList);  return shopResourceList;// 重点介绍  }  

为什么最后返回的参数不是挑用mybatis后的insert的返回值呢,细心的话可以发现,如果使用debug模式观察,会看到调用mybatis后insert的返回值是[],也就是空集合元素.

在mybatis3.3.1中,虽然加入了批量新增返回主键id的功能,但是它是这样运行的,在需要新增插入新元素集合对象时,它会需要参数对象,当执行完插入操作后,给之前的参数对象设置id值,也就是改变了需要插入对象集合中的元素的属性id值, 所以接收返回时,返回方法形参参数即可,同样的地址引用改变了内容,返回后的集合也是改变后的集合。

Mybatis执行批量插入返回数据库主键列表相关推荐

  1. Mybatis Mysql 批量插入返回id

    1. 目标: 使用Mybatis 批量插入数据返回自增的id 2. 具体实现 注意: MyBatis版本3.3.1或者以上 <insert id="save" useGene ...

  2. batchupdate写法_mybatis执行批量插入insert和批量更新update

    Mybatis批量插入和批量更新数据的资料相信大家从网上能查找到很多资料,本文重点总结一下mybatis执行批量插入insert和批量更新update数据.在mysql数据库中批量插入,如:inser ...

  3. 数据库主键自增插入显示值

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/nwsuaf2009012882/article/details/32703597 SQL Serve ...

  4. mysql主键自增为什么在插入的时候还要自己写主键值_数据库主键自增插入显示值...

    SQL Server 2008 数据库主键自增插入显示值 前几天在工作的时候遇到在删除数据库中表的数据的时候,删除之后,重新添加的数据没有得到原来的数据的id值(表中id为主键,且设置为自增) ,使用 ...

  5. (转)关于数据库主键和外键(终于弄懂啦)

    一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如   学生表(学号,姓名,性别,班级)  其中每个学 ...

  6. 小议数据库主键选取策略

    我们在建立数据库的时候,需要为每张表指定一个主键,所谓主键就是能够唯一标识表中某一 行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引.因为主键可以唯一标识某一行记录,所以可以确保执行数据更 ...

  7. 关于数据库主键和外键

    一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如   学生表(学号,姓名,性别,班级)  其中每个学 ...

  8. 小议数据库主键选取策略(转自吕震宇老师博文)

    < DOCTYPE html PUBLIC -WCDTD XHTML TransitionalEN httpwwwworgTRxhtmlDTDxhtml-transitionaldtd> ...

  9. 小议数据库主键选取策略(转)

    我们在建立数据库的时候,需要为每张表指定一个主键,所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引.因为主键可以唯一标识某一行记录,所以可以确保执行数据更新 ...

最新文章

  1. 2020 年 6 月编程语言排行榜,C 稳居第一,Rust 首进 Top 20!
  2. 计算机三年工作经验和研究生,三年工作经验和读三年研究生到底哪个更值?这个回答很权威...
  3. stylegan生成循环gif图片
  4. as3.0 删除子元件
  5. 责任链设计模式(过滤器、拦截器)
  6. Advice for Students--开始学术研究
  7. 登录表单 参考新浪微博
  8. 【安卓开发 】Android初级开发(网络操作)
  9. 企业库4.0 2008年3月发布的CTP
  10. Monocular slam 的理论基础(1)
  11. 大数据之-Hadoop_环境搭建_JDK安装---大数据之hadoop工作笔记0017
  12. 算法题解题方法技巧及典例汇总
  13. 贪心算法的python实现
  14. ubuntu 安装 oracle-xe-universal
  15. STM32:Code、RO、RW、Zi含义
  16. Window phone7 修改程序语言
  17. 79. 基于 PHP 的用户认证
  18. 对比transform中的世界参数和自身参数
  19. 苹果无需越狱(iPhone、iPad)手机多开教程
  20. 安装MATLAB时报错:提取错误 安装dsp_doc_en_common时检测到以下错误:某安装路径(指定的路径无效)

热门文章

  1. python程序设计黄锐军电子版_Python程序设计 黄锐军 高教社 计算机课件.zip-KC 017 08 0462.pptx...
  2. 深圳转广州的一位Java开发面试的心路历程,附面试题
  3. 计算机组成原理简答知识点,计算机组成原理简答题汇总,史上最全
  4. Virtual Private Network
  5. wordpress导航栏设置
  6. Solidworks2016安装过程中遇到的问题及解决方法
  7. 曲曲直直线条图计算机教案,三年级上册信息技术教案-10曲曲直直线条画 金色的秋天 |人教版(2015).doc...
  8. 图像清晰度识别之Laplacian算子
  9. Docker单节点部署OceanBase集群创建租户、用户、业务表
  10. HTML视频(Video)播放