問題:mybatis會自動生成一個insert方法如(用的是MySQL數據庫): java
<insert id="insert" parameterType="cn.hnne.iclt.model.Task" >
<selectKey resultType="java.lang.Integer" keyProperty="ictl_otaid" order="BEFORE" >
SELECT LAST_INSERT_ID() AS ID
</selectKey>
insert into .....)
values (...)
</insert> 數據庫
可是直接調用此方法,在記錄插入以後在去getTaskID(),獲得的是null或者0。 mybatis
在網上查了不少資料都沒有真正解決方案,沒有寫到實處的,如今寫下本身總結分享一下。 app
先分析原理再給出解決辦法 spa
insert這幾個字段:resultType是查詢進行select映射的時候返回類型。其中配置文件中的parameterType是能夠不配置的,mybatis會自動傳入的。這兩個不是重點。 xml
selectKey是返回主鍵,在Action得到主鍵就是經過get方法就能夠拿到task.getTaskID(),可是有時自動生成的拿不到; get
解決:一、裏面的keyProperty="otaid"的字段與實體(model)的屬性對應,這是mybatis的映射機制。 io
二、SELECT LAST_INSERT_ID() AS ID,不是數據庫的屬性字段名,一樣要給model中的實體屬性名。 原理
三、 Order="BEFORE" 若是 是Before那個拿到的是插入前的主鍵,那麼就是初始值null或者是0。 配置
那麼把它設置after,那就是拿到插入後自動增加的主鍵值。
下面是修改後的Mapper.xml的代碼。
<insert id="insert" parameterType="cn.hnne.iclt.model.Task" >
<selectKey resultType="int" keyProperty="otaid" order="AFTER" >
SELECT LAST_INSERT_ID() AS otaid </selectKey> insert into ..... </insert>