这也是java程序员面试中一个很常见的问题,我们平时写插入语句的时候其实不太需要获取返回值,我们知道insert语句的返回值是受影响的行数,但其实更多时候我们是忽略的。

问题引出
我们现在有一个User的实体类,它有id,username,age这三个字段,id是主键。我们需要在服务端接收前端传递过来的数据将它封装成一个User对象然后插入到mysql中。实际开发中前端只可能传递给服务端username和age这两个字段,id是不会传给后台的,后台的插入语句也不会写关于主键的插入,都是使用mysql的主键递增。那问题来了,如果说我们现在有这样一个需求,
插入数据后我需要拿到插入这一行数据的主键id,将id存到redis或者发送别的什么中间件,应该怎么做,难道需要再去mysql中查一遍吗?显然太麻烦了。

问题解决
我们在xml中添加useGeneratedKeys 和 keyProperty这两个字段,必须两个都加上,缺哪一个都不行!!!
并且keyProperty表示的是从数据库的主键中获取的值应该返回到java对象中的哪一个字段上,我这里写的是返回到id字段上,当然也应该这样写,如果你想返回到其他字段上也可以,改一下keyProperty后面的值就行了。
我们看下官方对着两个字段的解释
在这里插入图片描述

<insert id="insertUser" useGeneratedKeys="true" keyProperty="id" parameterType="User">
insert into user(username,age) values(#{username},#{age})
</insert>
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐