mybatis 獲取insert返回的主鍵


在我們開發過程中,在插入數據到數據庫時,很多時候都需要把其主鍵返回,這里就說一下mybatis是怎么獲取的。

其中mysql和oracle是不同的做法,因為mysql本身就提供字段自增的屬性,而oracle則需要使用序列。

mysql

<insert id="insert" parameterType="com.yitop.admin.domain.User" useGeneratedKeys="true" keyProperty="id">
insert into users (id, user_name, password, 
  real_name, status, email, 
  created_at, updated_at)
values (#{id,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, 
  #{realName,jdbcType=VARCHAR}, #{status,jdbcType=BIT}, #{email,jdbcType=VARCHAR},
  #{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP})
</insert>

配置中,keyProperty表示返回的id要保存到對象的那個屬性中,這里的名字要和對象的字段名對應上。而useGeneratedKeys表示主鍵id為自增長模式。mysql的話只要加上這兩個屬性就可以了,加上后會自動把主鍵set到對象的屬性上。

oracle

<insert id="insert" parameterType="com.yitop.admin.domain.User">
   <selectKey resultType="INTEGER" order="BEFORE" keyProperty="id">  
       SELECT SEQ_USER.NEXTVAL as id from DUAL
   </selectKey> 
    insert into users (id, user_name, password, 
      real_name, status, email, 
      created_at, updated_at)
    values (#{id,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, 
      #{realName,jdbcType=VARCHAR}, #{status,jdbcType=BIT}, #{email,jdbcType=VARCHAR},
      #{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP})
</insert>

因為oracle沒有自增的說法,所以不能使用useGeneratedKeys了。而是使用selectKey把id獲取並set到對象的屬性中。


免責聲明!

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



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