mybatis批量插入时获取最后一次所插入的主键一直为null

发布于 2021-11-27 03:44:34 字数 2009 浏览 837 评论 13

配置selectKey,单条插入时,能正常获取到插入的主键,但是批量插入时,一直为null.

<selectKey order="AFTER" keyProperty="id" resultType="INTEGER">
         SELECT LAST_INSERT_ID() AS id
</selectKey>



下面是完整的代码:
personMapper.xml


<insert id="insertBatch" parameterType="java.util.List" useGeneratedKeys="true">
insert into person (id, name, age, sex, address, telephone, birthday)
values
<foreach collection="list" index="index" item="item" separator=",">
	(#{item.id,jdbcType=INTEGER}, #{item.name,jdbcType=VARCHAR}, #{item.age,jdbcType=INTEGER},
	#{item.sex,jdbcType=VARCHAR}, #{item.address,jdbcType=VARCHAR},
	#{item.telephone,jdbcType=DOUBLE},#{item.birthday,jdbcType=VARCHAR})
</foreach>

<selectKey order="AFTER" keyProperty="id" resultType="INTEGER">
        SELECT LAST_INSERT_ID() AS id
</selectKey>
		
</insert>
junit的代码:



@Test
public void testInsertBatch(){
		
		List<Person> list = new ArrayList<Person>();
		
		for(int i=0; i < 5; i++){
			Person person = new Person();
			person.setAddress("CHCS" + i);
			person.setAge(88 + i);
			person.setName("ABC" + i);
			person.setSex("男");
			person.setTelephone(454545D);
			list.add(person);
		}
		
		System.out.println(" --------------  before -------------- ");
		for(Person person:list)
			System.out.println(person.toString());
		pm.insertBatch(list);     //pm为Person类DAO层实现类的一个实例化对象
		System.out.println(" --------------  after -------------- ");
		for(Person person:list)
			System.out.println(person.toString());
	}


这里批量插入之后,遍历后的对象所有的id属性都为null,数据可以正常插入。

补充:批量插入我是按照单条记录的插入写法写的,单条记录一模一样的配置(批量就加了个<foreach>)可以正常获取id.



如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(13

韬韬不绝 2021-11-29 02:48:53

去了,也无法获取到

女中豪杰 2021-11-29 02:48:52

回复
不是让你去掉,而是让你写一个正确的类型标识。

酒几许 2021-11-29 02:48:42

我觉得,应该是你自己写的resultType="INTEGER"的INTEGER,它不认识。

爱你是孤单的心事 2021-11-29 02:48:41

回复
汗。。。怎么debug?

心欲静而疯不止 2021-11-29 02:48:38

回复
批量插入可以正常插入,但是这个主键无法获取到,一直为null,是不是我获取的方式写错了?

惜醉颜 2021-11-29 02:37:58

回复
breakpoint

感情旳空白 2021-11-29 02:36:50

回复
不要放弃治疗

南冥有猫 2021-11-29 01:50:13

回复
mybatis的源码我都没下载过。。。还是请个高人指点一下比较快啊

清晨说ぺ晚安 2021-11-29 00:46:00

自增id的话就不用再在sql里贴了吧

http://chenzhou123520.iteye.com/blog/1583407

终止放荡 2021-11-28 19:45:53

我只想获取最后一条id。这种方式,看网上说都可以获取到,但是我并没有看到完整的例子,所以想知道这种方式的实现。

能否归途做我良人 2021-11-28 15:41:59

回复
在同一个连接的情况下插入完毕后再手动查询一遍SELECT LAST_INSERT_ID() AS id, 讲这条语句当做一个单独的查询应该可以查到最后的id.

顾挽 2021-11-28 03:54:04

回复
这样的确可以,但是mybatis的result自动帮我们填充这个对象要怎么实现?

傾城如夢未必闌珊 2021-11-27 17:22:59

要想获取id就不要批量插入了, 一条一条的插

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文