实现Mybatis批量插入数据库,返回插入成功后的主键id

1、升级Mybatis版本到3.3.1。官方在这个版本中加入了批量新增返回主键id的功能

2、在Dao中不能使用@param注解。

3、Mapper.xml中使用list变量(parameterType="java.util.List")接受Dao中的参数集合。

下面是具体代码过程,可供参考

mapper.xml层代码
 

<!-- insertForeachWord 批量插入 -->
<insert id="insertForeachWord" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id"> 
    insert into 
    table
    (name,user_id,audit_time,status)  
    values 
    <foreach collection="list" item="item" index="index" separator=","> 
	(#{item.name,jdbcType=VARCHAR},#{item.userId,jdbcType=INTEGER},
	#{item.auditTime,jdbcType=TIMESTAMP},#{item.status,jdbcType=INTEGER}) 
    </foreach>	
</insert>

dao或者service实现层代码

List<TWord> collect = notExsitWord.stream().map(wordName ->{
		TWord newTWord = TWord.newTWord(wordName, time, gjUserName);//构造方法
		return newTWord;
		}).collect(Collectors.toList());
	categoryMapper.insertForeachWord(collect);
        //collect为批量插入集合,插入成功后collect中会带有主键id
	List<TRelationWarning> notExsitWarning = collect.stream().map(w ->{
		TRelationWarning wordWarning = new TRelationWarning();
		wordWarning.setWarningRuleId(warningRuleId);
		wordWarning.setWordId(w.getId());
		return wordWarning;
	}).collect(Collectors.toList());

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值