开发者社区> 0先生> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Mybatis批量插入返回自增主键

简介:
+关注继续查看
Mybatis批量插入返回自增主键:
**大家都知道Mybatis在插入单条数据的时候有两种方式返回自增主键:**
1、对于支持生成自增主键的数据库:useGenerateKeys和keyProperty。
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 id="insertAuthor" useGeneratedKeys="true"
    keyProperty="id">
  insert into Author (username,password,email,bio)
  values (#{username},#{password},#{email},#{bio})
</insert>
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 id="insertAuthor" useGeneratedKeys="true"
    keyProperty="id">
  insert into Author (username, password, email, bio) values
  <foreach item="item" collection="list" separator=",">
    (#{item.username}, #{item.password}, #{item.email}, #{item.bio})
  </foreach>
</insert>

从官网资料可以看出Mybatis是支持批量插入时返回自增主键的。
但是在本地测试的时候使用上述方式确实不能返回自增id,而且还报错(不认识keyProperty中指定的Id属性),然后在网上找相关资料。终于在Stackoverflow上面找到了一些信息。
<selectKey resultType="long" keyProperty="id" order="AFTER">    
        SELECT    
        LAST_INSERT_ID()    
    </selectKey> 
<insert id="insertAuthor" useGeneratedKeys="true"
    keyProperty="id">
  insert into Author (username, password, email, bio) values
  <foreach item="item" collection="list" separator=",">
    (#{item.username}, #{item.password}, #{item.email}, #{item.bio})
  </foreach>
</insert>
这样写返回的id为null;
解决办法:
1、升级Mybatis版本到3.3.1。
2、在Dao中不能使用@param注解。
3、Mapper.xml中使用list变量接受Dao中的集合。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MyBatis 使用 SQL 语句构建器
MyBatis 使用 SQL 语句构建器
72 0
使用MyBatis时,无法绑定抽象方法与配置SQL语句的异常解决方法
使用MyBatis时,无法绑定抽象方法与配置SQL语句的异常解决方法
47 0
MyBatis超详细介绍——SQL语句构建器类
MyBatis超详细介绍——SQL语句构建器类 (本文作为学习笔记,了解更多请参考:MyBatis参考文档) MyBatis3提供了SQL类帮助构造SQL语句: private String selectPersonSql() { return new SQL() {{ SELECT("P.
2486 0
mybatis源码解读(五)——sql语句的执行流程
  还是以第一篇博客中给出的例子,根据代码实例来入手分析。 1 static { 2 InputStream inputStream = MybatisTest.class.
1022 0
mybatis的xml映射文件SQL语句的增删改查、参数、缓存
 2.2 select 一个select 元素非常简单。例如: Xml代码             SELECT ST.
760 0
《Java EE核心框架实战》—— 2.1 MyBatis 3的SQL映射 文件
因为MyBatis框架是基于SQL映射的,所以SQL映射文件在此框架中的位置非常重要,但好在SQL映射文件非常简单。本章将介绍SQL映射文件的具体内容及实例使用。
1408 0
后台(41)——MyBatis的动态SQL
探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 Android多分...
1048 0
MyBatis快速入门(三) 动态SQL
动态SQL MyBatis还有一个方便的功能就是动态SQL,可以根据条件智能生成SQL语句。这里的例子全部来自MyBatis文档。 if标签 下面这个例子使用了MyBatis的if元素,在标题不为空的情况下在查询结果中包含标题的查询。
737 0
Mybatis通过一条SQL查出关联的对象
 Mybatis通过一条SQL查出关联的对象 以往在做对象的查询时如果需要把关联的对象一起查出来是通过resultMap的子查询来进行的,这种用法可以参考我之前写的一篇文章http://elim.iteye.com/blog/1337009。
930 0
+关注
0先生
天行健,君子以自强不息; 地势坤,君子以厚德载物。
2
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载