數據庫討論(一)mybatis獲取當前插入記錄的id

問題:mybatis會自動生成一個insert方法如(用的是MySQL數據庫):

  <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。

在網上查了很多資料都沒有真正解決方案,沒有寫到實處的,現在寫下自己總結分享一下大笑

先分析原理再給出解決辦法

insert這幾個字段:resultType是查詢進行select映射的時候返回類型。其中配置文件中的parameterType是可以不配置的,mybatis會自動傳入的。這兩個不是重點。

selectKey是返回主鍵,在Action獲得主鍵就是通過get方法就可以拿到task.getTaskID(),但是有時自動生成的拿不到;

解決:1、裏面的keyProperty="otaid"的字段與實體(model)的屬性對應,這是mybatis的映射機制。

           2、SELECT LAST_INSERT_ID() AS ID,不是數據庫的屬性字段名,同樣要給model中的實體屬性名。

          3、 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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章