一、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 對象的主鍵屬性。