MyBatis中如何获取刚插入数据的 id

Posted shachen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis中如何获取刚插入数据的 id相关的知识,希望对你有一定的参考价值。

一、MyBatis中如何获取刚插入数据的 id

情景:

三张表

1、生成订单 (easybuy_order)

2、生成订单明细 (easybuy_order_detail)

3、更新商品库存 (easybuy_product)

在通过调用相应的 DAO 接口方法来实现对三张表的更新操作,并且这三步操作也是前后关联的,后一步的操作依托于上一步操作的结果,如第一步生成订单 (即在订单主表(easybuy_order)新增一条数据)之后需要获取到新增订单数据的 id 作为下一步生成订单明细的 orderId。

在 : orderDetail.setOrderId(order.getId());    一步中  order.getId() 会报空指针错误。

 

析:原因是 order.getId() 为空,故报空指针异常

那么在MyBatis 中,当往mysql  数据库中插入一条记录后,如何获取该条记录的 id (即自增主键值)?

解决方案:在OrderMapper.xml中指定 keyProperty 属性,代码如下:

<insert id="add" parameterType="order" 
                    useGeneratedKeys="true" keyProperty="id">
     insert into easybuy_order(userId,loginName,userAddress,createTime)
         values(#{userId},#{loginName},#{userAddress},#{createTime})  
</insert>    

如上所示,我们在 insert 中首先设置 useGenerateKeys="true",然后指定keyProperty="id", id代表插入的Order 对象的主键属性。

技术图片

 

以上是关于MyBatis中如何获取刚插入数据的 id的主要内容,如果未能解决你的问题,请参考以下文章

Java MyBatis 插入数据库返回主键

基于注解的mybatis插入一条数据如何返回这条数据的对象或者他的id?

mybatis里使用sqlsessiontemplate怎么获得刚插入的自增主键id

mybatis 批量插入 怎么获取刚刚插入的数据的id集合

获取mybatis中最后插入记录的id

MyBatis,如何获取插入的自动生成密钥? [MySql]