第1次代码
void batchAdd(List<Photo> list);

<insert id="batchAdd"   parameterType="java.util.List" keyProperty="id" useGeneratedKeys="true">
insert into
photo(bizid,cover,sort,url,name,remark,status,type,addtime,uptime)
values<foreach item="item" index="index" separator="," collection="list">
(#{item.bizid},#{item.cover},#{item.sort},#{item.url},#{item.name},#{item.remark},#{item.status},#{item.type},now(),now())
</foreach>
</insert>

报错
Error getting generated key or setting result to parameter object.
org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [list]
Caused by: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [list]

第2次代码

<insert id="batchAdd"   parameterType="java.util.List">
<selectKey resultType="long" keyProperty="id" order="AFTER">
SELECT
LAST_INSERT_ID()
</selectKey>
insert into
photo(bizid,cover,sort,url,name,remark,status,type,addtime,uptime)
values<foreach item="item" index="index" separator="," collection="list">
(#{item.bizid},#{item.cover},#{item.sort},#{item.url},#{item.name},#{item.remark},#{item.status},#{item.type},now(),now())
</foreach>
</insert>

批量插入成功了,但是id是null

第3次代码
  Map map = new HashMap();
map.put("list", toAddPhotoList);

void batchAdd2(Map map);

<insert id="batchAdd2" keyProperty="id" useGeneratedKeys="true">
insert into
photo(bizid,cover,sort,url,name,remark,status,type,addtime,uptime)
values<foreach item="item" index="index" separator="," collection="list">
(#{item.bizid},#{item.cover},#{item.sort},#{item.url},#{item.name},#{item.remark},#{item.status},#{item.type},now(),now())
</foreach>
</insert>

批量插入成功了,但是id是null
  
  在解决这个问题的过程中,我最初想实现“批量插入即可,心里默认为和插入1个一样,会有id”,
 后来为了“批量插入也要返回主键id”,最后我发现,"这是不能实现的"。
 
   mysql底层,insert values批量插入,返回的是“个数”。
   目前,不知道怎么去证实我的猜测。
   
   最后,附上单个插入的sql

   <insert id="add" keyProperty="id" useGeneratedKeys="true">
insert into photo(bizid,cover,sort,url,name,remark,status,type,addtime,uptime)
values(#{bizid},#{cover},#{sort},#{url},#{name},#{remark},#{status},#{type},now(),now())
</insert>

Mybatis批量插入,是否能够返回id列表的更多相关文章

  1. 难题解决:Mycat数据库中间件+Mybatis批量插入数据并返回行记录的所有主键ID

     一.mybatis的版本必须为3.3.1及其以上 项目所依赖的mybatis的版本必须为3.3.1及其以上,低版本的不行,保证hap项目的依赖的mybatis的jar的版本必需为需要的版本: 二.在 ...

  2. MyBatis 批量插入获取自增 id 问题解决

    问题: 通过 MyBatis 进行批量插入时,如果我们想获取插入对象所对应的主键 id,做法是直接在 <insert> 标签中直接加入 useGeneratedKeys.keyProper ...

  3. mybatis批量插入数据

    Mybatis在执行批量插入时,如果使用的是for循环逐一插入,那么可以正确返回主键id.如果使用动态sql的foreach循环,那么返回的主键id列表,可能为null,这让很多人感到困惑:本文将分析 ...

  4. 160421、MyBatis批量插入数据

    在程序中封装了一个List集合对象,然后需要把该集合中的实体插入到数据库中,由于项目使用了Spring+MyBatis的配置,所以打算使用MyBatis批量插入,由于之前没用过批量插入,在网上找了一些 ...

  5. Mybatis 批量插入

    一.首先对于批量数据的插入有两种解决方案(下面内容只讨论和Mysql交互的情况) 1)for循环调用Dao中的单条插入方法 2)传一个List<Object>参数,使用Mybatis的批量 ...

  6. mybatis批量插入数据到oracle

    mybatis 批量插入数据到oracle报 ”java.sql.SQLException: ORA-00933: SQL 命令未正确结束“  错误解决方法 oracle批量插入使用 insert a ...

  7. springMVC 接收数组参数,mybatis 接收数组参数,mybatis批量插入/批量删除案例

    案例是给一个用户赋予多个权限,多个权限用其对应的主键 id 为参数,组成了 一个id数组,传给springMVC,然后springMVC传给mybatis,然后mybatis批量插入.其实类似的场景还 ...

  8. 解决Oracle+Mybatis批量插入报错:SQL 命令未正确结束

    Mybatis批量插入需要foreach元素.foreach元素有以下主要属性: (1)item:集合中每一个元素进行迭代时的别名. (2)index:指定一个名字,用于表示在迭代过程中,每次迭代到的 ...

  9. MyBatis批量插入数据(MySql)

    由于项目需要生成多条数据,并保存到数据库当中,在程序中封装了一个List集合对象,然后需要把该集合中的实体插入到数据库中,项目使用了Spring+MyBatis,所以打算使用MyBatis批量插入,应 ...

随机推荐

  1. vSphere5安装配置视频教程

    vSphere5安装配置视频教程 本文出自 "李晨光原创技术博客" 博客,请务必保留此出处http://chenguang.blog.51cto.com/350944/819550

  2. LG Gram 2018 z980 白

    因为今年8代处理器i5的双核变成了四核,感觉是个换电脑的好时机,本来打算买macbook,但是6月的发布会并没有发布,于是开始寻找一些比较有特点的笔记本电脑. 了解了这样一款笔记本 LG GRAM 1 ...

  3. pwd---以绝对路径的方式显示用户当前工作目录

    pwd命令以绝对路径的方式显示用户当前工作目录.命令将当前目录的全路径名称(从根目录)写入标准输出.全部目录使用/分隔.第一个/表示根目录,最后一个目录是当前目录.执行pwd命令可立刻得知您目前所在的 ...

  4. 洛谷 P1581 A+B Problem(升级版)

    P1581 A+B Problem(升级版) 题目背景 小明这在写作业,其中有一道A+B Problem ,他想啊想啊想,就是想不出来,于是就找到了会编程的你...... 题目描述 这里的A+B是很奇 ...

  5. C# ArcGIS Engine 线打断

    /// <summary> /// 打断线,用于在点击点处,打断该条线 /// </summary> /// <param name="t_pLineFeatu ...

  6. Linux局域网登陆响应时间过长

    在局域网中,使用ssh登陆到其他机器上时,有时会出现等待10s以上才能正常登陆的问题. 原因: Linux默认使用dns解析登陆IP,但是在局域网,并没有dns服务器,而且机器上也没有添加 IP与域名 ...

  7. LeetCode 258 Add Digits(数字相加,数字根)

    翻译 给定一个非负整型数字,反复相加其全部的数字直到最后的结果仅仅有一位数. 比如: 给定sum = 38,这个过程就像是:3 + 8 = 11.1 + 1 = 2.由于2仅仅有一位数.所以返回它. ...

  8. LeetCode Implement strStr()(Sunday算法)

    LeetCode解题之Implement strStr() 原题 实现字符串子串匹配函数strStr(). 假设字符串A是字符串B的子串.则返回A在B中首次出现的地址.否则返回-1. 注意点: - 空 ...

  9. jquery11源码 animate() : 运动的方法

    { var fxNow, timerId, rfxtypes = /^(?:toggle|show|hide)$/, rfxnum = new RegExp( "^(?:([+-])=|)( ...

  10. vim-normal多行操作命令的使用

    命令行命令-<:normal>这个命令可以重复上一个操作.他其实就跟.命令的效果查不到.不同的是,他可以把.的效果,作用于你用可视模式下的多行.例如,如果你想在下面的文字里在每一行加一个; ...