Mybatis执行批量插入返回数据库主键列表

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

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

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


  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://my.oschina.net/liuyuantao/blog/1483862

你可能感兴趣的:(Mybatis执行批量插入返回数据库主键列表)