mybatis返回自增主鍵踩坑記


背景

MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以對配置和原生Map使用簡單的 XML 或注解,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。

mybatis返回自增主鍵踩坑記
使用傳統的代碼結構controller-->service-->dao

dao傳入實體,int insertEntity(Entity entity),其中entity的id為自增主鍵

調用service方法返回int的值總是為1。

xml配置

<insert id="insertEntity" parameterType="com.xxxx.dto.Entity " keyColumn="id"
useGeneratedKeys="true" keyProperty="id">

INSERT INTO ...

嘗試方案

懷疑配置不生效,使用

<selectKey resultType="Integer" keyProperty="id" order="AFTER">

select @@IDENTITY as id

</selectKey>

仍然不行,再換一種

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

仍然不行。

調試

通過在調用插入操作后,不小心查看了entity的值,發現此時id為自增后的值,瞬間明白了,insert返回的值是受影響的行數,插入后的id放入了entity中,取返回后的id值時,需要從entity中去獲取。

總結

返回插入的唯一主鍵是通過實體Entity獲取,而不能通過sql執行后的int或long取,因為xml里面sql執行后返回的值是受影響行數.

錯誤獲取插入的唯一主鍵的方式:

public Result insertEntity(insertEntity entity) {

Long id= dao.insertEntity(entity);

System.out.println(id);

}

正確獲取插入的唯一主鍵的方式,注意:是entity

public Result insertEntity(insertEntity entity) {

dao.insertEntity(entity);

System.out.println(entity.getId());

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM