mybatis批量插入返回主键失败的坑及解决
批量插入返现没有返回主键
关键点
foreach里的collection必须是list,不然就会报错。
返回主键的标签
关于返回主键ID,需要在insert标签中添加,useGeneratedKeys=“true” keyProperty=“id”,useGeneratedKeys和keyProperty必须配合使用,keyProperty的字段就是返回的主键ID
mybatis3.3.1及以上的版本,才支持批量插入返回主键ID
mybatis批量新增之主键回写
正常批量新增比较简单 :
写个例子
<insert id="batchInsert" parameterType="list" useGeneratedKeys="true" keyProperty="id"> INSERT INTO `x'x'x` ( `xx`, `xxx` ) VALUES <foreach collection="list" item="item" separator=","> ( #{item.xx}, #{item.xxx} ) </foreach> </insert>
注: useGeneratedKeys=“true” keyProperty=“id” 这个是为了回写id的.
以前基本上没有需要用到回写id的地方,但是今天需要用到了.
但是一开始并没有给我回写主键.
原因就在于我的collection=“这里写的不是list,而是xxList”.
我的mapper里面写的是@param(“xxList”); 多个参数时需要使用这个注解指定.
这样执行是不会报错的.但是id就是不会回写.
再回头, 这里应该是一个映射的概念, 以前应该是想错了.
待我查阅了一些资料之后,我认为,这个collection,应该不是用来指定你在mapper里面传入的什么参数的.
而是指定这个集合的类型是什么? 比如: list,set,map这样的类型.
而当我写成这样时 : collection=“list” @Param(“list”).
id就给我回写了.而当我传入的参数不止一个时,我依旧可以使用@Param进行正常定义.但是是一个对象,一个String,我没有试过传入两个对象的,而且我认为,无论需要什么字段,一个对象就可以搞定,我传入两个参数,只是做一次尝试.如果只是一个对象的话,甚至都不需要用@Param.id也是会回写的.
但是 collection="list"这个是一定要这样写的.不然会报错
要么全部成功,要么全部失败,使用int去接收返回值,会接收到新增的条数的.
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Struts2中Action中是否需要实现Execute方法
这篇文章主要介绍了Struts2中Action中是否需要实现Execute方法的相关资料,需要的朋友可以参考下2016-03-03idea使用Maven Helper插件去掉无用的poom 依赖信息(详细步骤)
这篇文章主要介绍了idea使用Maven Helper插件去掉无用的poom 依赖信息,本文分步骤给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-04-04Java拦截过滤器模式 (Intercepting Filter )实现方法
拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理,本文通过实例代码介绍Java拦截过滤器模式 (Intercepting Filter )的相关知识,感兴趣的朋友跟随小编一起看看吧2024-03-03
最新评论