mybatis獲取當前插入記錄的id

問題: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>

相關文章
相關標籤/搜索