博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis 批量插入 返回主键id
阅读量:6050 次
发布时间:2019-06-20

本文共 2083 字,大约阅读时间需要 6 分钟。

我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键:

1、对于支持生成自增主键的数据库:增加 useGenerateKeys和keyProperty ,<insert>标签属性。

2、不支持生成自增主键的数据库:使用<selectKey>。

但是怎么对批量插入数据返回自增主键的解决方式网上看到的还是比较少,至少百度的结果比较少。

Mybatis官网资料提供如下:

First, if your database supports auto-generated key fields (e.g. MySQL and SQL Server), then you can simply set useGeneratedKeys="true" and set the keyProperty to the target property and you're done. For example, if the Authortable above had used an auto-generated column type for the id, the statement would be modified as follows:

insert into Author (username,password,email,bio) values (#{username},#{password},#{email},#{bio})

If your database also supports multi-row insert, you can pass a list or an array of Authors and retrieve the auto-generated keys.

insert into Author (username, password, email, bio) values
(#{item.username}, #{item.password}, #{item.email}, #{item.bio})

 

从官网资料可以看出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 INTO
(relation_id, summary_id, relation_type) VALUES
( #{shopResource.relationId}, #{shopResource.summaryId}, #{shopResource.relationType} )

 

dao实现层代码

public List
batchinsertCallId(List
shopResourceList) { this.getSqlSession().insert(getStatement(SQL_BATCH_INSERT_CALL_ID), shopResourceList); return shopResourceList;// 重点介绍 }

为什么最后返回的参数不是挑用mybatis后的insert的返回值呢,细心的话可以发现,如果使用debug模式观察,会看到调用mybatis后insert的返回值是[],也就是空集合元素,在mybatis3.3.1中,虽然加入了批量新增返回主键id的功能,但是它是这样运行的,在需要新增插入新元素集合对象时,它会需要参数对象,当执行完插入操作后,给之前的参数对象设置id值,也就是改变了需要插入对象集合中的元素的属性id值, 所以接收返回时,返回方法形参参数即可,同样的地址引用改变了内容,返回后的集合也是改变后的集合。

---------------------
原文:

转载于:https://www.cnblogs.com/abel-he/p/mybatis.html

你可能感兴趣的文章
操作文件的File类
查看>>
Java基础关于Map(字典)的方法使用
查看>>
通过tarball形式安装HBASE Cluster(CDH5.0.2)——集群安装总览
查看>>
mysql安装出错cannot create windows service for mysql.error:0
查看>>
容器(集合)
查看>>
windows 无法分析或处理 pass 报错问题汇总
查看>>
hibernate(五) hibernate一对一关系映射详解
查看>>
An HTTP & HTTP/2 client for Android and Java applications OkHttp
查看>>
sqlserver字符串合并(merge)方法汇总
查看>>
Ansible3:ansible.cfg配置说明【转】
查看>>
关于项目中下单流程HTML设计的一些思考
查看>>
Cent OS 常用配置命令
查看>>
iOS可视化动态绘制八种排序过程(Swift版)
查看>>
简明Python3教程 12.问题解决
查看>>
Controller向View传值方式总结
查看>>
oracle查询当前会话数量
查看>>
如何在tomcat启动时自动加载一个类
查看>>
java生成二维码的三个工具
查看>>
重构第22天 分解方法(Break Method)
查看>>
JS Date parse
查看>>