mybatis批量插入返回主键失败的坑及解决

 更新时间:2023年11月03日 10:37:20   作者:软件宫城狮  
这篇文章主要介绍了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去接收返回值,会接收到新增的条数的.

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • Java 模拟cookie登陆简单操作示例

    Java 模拟cookie登陆简单操作示例

    这篇文章主要介绍了Java 模拟cookie登陆简单操作,结合实例形式分析了Java 模拟cookie登陆的相关原理与基本实现技巧,需要的朋友可以参考下
    2020-03-03
  • Mybatis中实体类属性与数据列表间映射方法介绍

    Mybatis中实体类属性与数据列表间映射方法介绍

    这篇文章主要介绍了Mybatis中实体类属性与数据列表间映射方法介绍,一共四中方法,供大家参考。
    2017-10-10
  • Java中Queue的poll()和remove()区别详解

    Java中Queue的poll()和remove()区别详解

    这篇文章主要介绍了Java中Queue的poll()和remove()区别详解,Queue接口提供了许多方法,其中poll()和remove()是两个常用的方法,它们的区别在于,当队列为空时,poll()方法返回null,而remove()方法会抛出,需要的朋友可以参考下
    2023-07-07
  • java实现简易的计算器界面

    java实现简易的计算器界面

    这篇文章主要为大家详细介绍了java实现简易的计算器界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • java实现切割wav音频文件的方法详解【附外部jar包下载】

    java实现切割wav音频文件的方法详解【附外部jar包下载】

    这篇文章主要介绍了java实现切割wav音频文件的方法,结合实例形式详细分析了java切割wav音频文件的相关原理、操作技巧与注意事项,并附带外部jar包供读者下载,需要的朋友可以参考下
    2019-05-05
  • Java使用分治算法实现排序数索引功能示例【二分搜索】

    Java使用分治算法实现排序数索引功能示例【二分搜索】

    这篇文章主要介绍了Java使用分治算法实现排序数索引功能,结合具体实例形式分析了java分治算法进行排序索引的相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • Mybatis动态查询字段及表名的实现

    Mybatis动态查询字段及表名的实现

    本文主要介绍了Mybatis动态查询字段及表名的实现,通过灵活运用Mybatis提供的动态SQL功能,我们可以构建更加灵活、高效的查询语句,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2024-01-01
  • SpringCloud hystrix断路器与局部降级全面介绍

    SpringCloud hystrix断路器与局部降级全面介绍

    什么是服务降级?当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作
    2022-10-10
  • Spring中Bean有关NullPointerException异常的原因分析

    Spring中Bean有关NullPointerException异常的原因分析

    在Spring中使用@Autowired注解注入的bean不能在静态上下文中访问,否则会导致NullPointerException,解决方法包括避免在静态方法中使用注入的bean,或者使用Spring的ApplicationContext来获取bean,但后者不推荐
    2024-12-12
  • Java实现简单双色球摇奖功能过程解析

    Java实现简单双色球摇奖功能过程解析

    这篇文章主要介绍了Java实现简单双色球摇奖功能过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09

最新评论