mybatis实现批量插入并返回主键(xml和注解两种方法)

 更新时间:2021年12月03日 15:07:54   作者:yjclsx  
这篇文章主要介绍了mybatis实现批量插入并返回主键(xml和注解两种方法),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

mybatis批量插入并返回主键(xml和注解两种方法)

mybatis批量插入

在mysql数据库中支持批量插入,所以只要配置useGeneratedKeys和keyProperty就可以批量插入并返回主键了。

比如有个表camera,里面有cameraNo,chanIndex,cameraName这三个字段,其中cameraNo是自增主键。

下面是批量插入的Dao层接口:

void batchInsertCameras(@Param("list") List<Camera> cameras);

xml形式

<insert id="batchInsertCameras" useGeneratedKeys="true" keyProperty="cameraNo">
    insert into camera (chanIndex,cameraName)
    values
    <foreach collection="list" item="c" separator=",">
        (#{c.chanIndex},#{c.cameraName})
    </foreach>
</insert>

注解形式

@Insert("<script>insert into camera (chanIndex,cameraName) values " +
        "<foreach collection='list' item='c' separator=','>(#{c.chanIndex},#{c.cameraName})</foreach></script>")
@Options(useGeneratedKeys = true, keyProperty = "cameraNo")
void batchInsertCameras(@Param("list") List<Camera> cameras);

注意:@Param里必须写成list, foreach的collection也必须写成list,否则批量插入后会报错说找不到"cameraNo"字段,而无法返回主键。

通过上面的xml形式或者注解形式的配置(我这是spring boot的项目,引入的mybatis-spring-boot-starter,采用的是注解形式),就可以批量插入并返回主键了,主键会被设置到Camera对象的cameraNo字段中。

cameraMapper.batchInsertCameras(cameras);
for(Camera camera : cameras){
    System.out.println(camera.getCameraNo());
}

执行批量插入时,需确保至少有一条待插入的记录,否则会导致sql有误而报错。

mybatis批量插入并返回主键笔记

mapper中的代码

int insertBatchUserReturnId(List<User> users);

也可以在形参前面加上@Param("xxxx")

xml中的代码,collection必须填list类型

<insert id="insertBatchUserReturnId" keyProperty="userId" useGeneratedKeys="true">
 insert into message (user_id, user_name, user_type, user_passwd, user_phone,user_pic,user_address)
 values
 <foreach collection="list" item="item" open="(" close=")" separator=",">
  #{item.userId,jdbcType=INTEGER}, #{item.userName,jdbcType=VARCHAR}, #{item.userType,jdbcType=TINYINT}, 
  #{item.userPasswd,jdbcType=VARCHAR}, #{item.userPhone,jdbcType=VARCHAR},
  #{item.userPic,jdbcType=VARCHAR},#{item.userAddress,jdbcType=VARCHAR}
 </foreach>
</insert>

执行完这条语句之后,原来的users就会自动带上主键userId。

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

相关文章

  • Java反射简易教程

    Java反射简易教程

    这篇文章主要介绍了Java反射简易教程,小编觉得挺不错的,这里分享给大家,需要的朋友可以参考。
    2017-11-11
  • Java实现PDF转Word的示例代码(无水印无页数限制)

    Java实现PDF转Word的示例代码(无水印无页数限制)

    这篇文章主要为大家详细介绍了如何利用Java语言实现PDF转Word文件的效果,并可以无水印、无页数限制。文中的示例代码讲解详细,需要的可以参考一下
    2022-05-05
  • SpringData JPA 如何搭建 xml的配置方式

    SpringData JPA 如何搭建 xml的配置方式

    这篇文章主要介绍了SpringData JPA 如何搭建 xml的配置方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • java实现简单扫雷游戏

    java实现简单扫雷游戏

    这篇文章主要为大家详细介绍了java实现简单扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 2020 IDEA安装教程与激活(idea2020激活码)

    2020 IDEA安装教程与激活(idea2020激活码)

    这篇文章主要介绍了2020 IDEA安装教程与激活(idea2020激活码),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • java基于jedisLock—redis分布式锁实现示例代码

    java基于jedisLock—redis分布式锁实现示例代码

    这篇文章主要介绍了jedisLock—redis分布式锁实现示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Java throw和throws使用区别分析

    Java throw和throws使用区别分析

    这篇文章主要介绍了Java throw和throws使用区别分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 使用idea的database模块绘制数据库er图的方法

    使用idea的database模块绘制数据库er图的方法

    这篇文章主要介绍了使用idea的database模块绘制数据库er图,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • 详解java的值传递、地址传递、引用传递

    详解java的值传递、地址传递、引用传递

    这篇文章主要介绍了详解java的值传递、地址传递、引用传递的相关资料,需要的朋友可以参考下
    2017-06-06
  • javaWEB实现相册管理的简单功能

    javaWEB实现相册管理的简单功能

    这篇文章主要介绍了javaWEB实现相册管理的简单功能,包括图片的上传、统一浏览、单个下载、单个删除,还有一个功能只能删除自己上传的文件,感兴趣的小伙伴们可以参考一下
    2015-11-11

最新评论