Mybatis执行批量插入返回数据库主键列表
原文地址
【推荐阅读】微服务还能火多久?>>>
我们都知道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执行批量插入返回数据库主键列表相关推荐
- Mybatis Mysql 批量插入返回id
1. 目标: 使用Mybatis 批量插入数据返回自增的id 2. 具体实现 注意: MyBatis版本3.3.1或者以上 <insert id="save" useGene ...
- batchupdate写法_mybatis执行批量插入insert和批量更新update
Mybatis批量插入和批量更新数据的资料相信大家从网上能查找到很多资料,本文重点总结一下mybatis执行批量插入insert和批量更新update数据.在mysql数据库中批量插入,如:inser ...
- 数据库主键自增插入显示值
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/nwsuaf2009012882/article/details/32703597 SQL Serve ...
- mysql主键自增为什么在插入的时候还要自己写主键值_数据库主键自增插入显示值...
SQL Server 2008 数据库主键自增插入显示值 前几天在工作的时候遇到在删除数据库中表的数据的时候,删除之后,重新添加的数据没有得到原来的数据的id值(表中id为主键,且设置为自增) ,使用 ...
- (转)关于数据库主键和外键(终于弄懂啦)
一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学 ...
- 小议数据库主键选取策略
我们在建立数据库的时候,需要为每张表指定一个主键,所谓主键就是能够唯一标识表中某一 行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引.因为主键可以唯一标识某一行记录,所以可以确保执行数据更 ...
- 关于数据库主键和外键
一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学 ...
- 小议数据库主键选取策略(转自吕震宇老师博文)
< DOCTYPE html PUBLIC -WCDTD XHTML TransitionalEN httpwwwworgTRxhtmlDTDxhtml-transitionaldtd> ...
- 小议数据库主键选取策略(转)
我们在建立数据库的时候,需要为每张表指定一个主键,所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引.因为主键可以唯一标识某一行记录,所以可以确保执行数据更新 ...
最新文章
- 2020 年 6 月编程语言排行榜,C 稳居第一,Rust 首进 Top 20!
- 计算机三年工作经验和研究生,三年工作经验和读三年研究生到底哪个更值?这个回答很权威...
- stylegan生成循环gif图片
- as3.0 删除子元件
- 责任链设计模式(过滤器、拦截器)
- Advice for Students--开始学术研究
- 登录表单 参考新浪微博
- 【安卓开发 】Android初级开发(网络操作)
- 企业库4.0 2008年3月发布的CTP
- Monocular slam 的理论基础(1)
- 大数据之-Hadoop_环境搭建_JDK安装---大数据之hadoop工作笔记0017
- 算法题解题方法技巧及典例汇总
- 贪心算法的python实现
- ubuntu 安装 oracle-xe-universal
- STM32:Code、RO、RW、Zi含义
- Window phone7 修改程序语言
- 79. 基于 PHP 的用户认证
- 对比transform中的世界参数和自身参数
- 苹果无需越狱(iPhone、iPad)手机多开教程
- 安装MATLAB时报错:提取错误 安装dsp_doc_en_common时检测到以下错误:某安装路径(指定的路径无效)
热门文章
- python程序设计黄锐军电子版_Python程序设计 黄锐军 高教社 计算机课件.zip-KC 017 08 0462.pptx...
- 深圳转广州的一位Java开发面试的心路历程,附面试题
- 计算机组成原理简答知识点,计算机组成原理简答题汇总,史上最全
- Virtual Private Network
- wordpress导航栏设置
- Solidworks2016安装过程中遇到的问题及解决方法
- 曲曲直直线条图计算机教案,三年级上册信息技术教案-10曲曲直直线条画 金色的秋天 |人教版(2015).doc...
- 图像清晰度识别之Laplacian算子
- Docker单节点部署OceanBase集群创建租户、用户、业务表
- HTML视频(Video)播放