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