1. 程式人生 > >MyBatis 獲取insert操作返回的主鍵

MyBatis 獲取insert操作返回的主鍵

注:databaseId欄位如沒有在主配置檔案中配置databaseIdProvider等資訊,請不要新增該欄位。

1、第一種為支援自增的資料庫,例如msyql

需要在insert標籤設定useGeneratedKeys是否使用,和keyProperty主鍵對應實體bean的物件

<!-- 
        mysql支援自增主鍵, 
                        設定useGeneratedKeys為true即可,
        keyProperty:主鍵屬性                
                        注意返回的值在Employeed物件中,getId()可獲取
    -->
    <insert id="addEmp" useGeneratedKeys="true" keyProperty="id" parameterType="com.du.mybatis.bean.Employee" databaseId="mysql">
        insert into tbl_employee (last_name, email, gender)
        values(#{lastName},#{email},#{gender})
    </insert>



2、第二種是不支援自增,需要使用序列的資料,例如oracle,需要使用selectKey標籤進行設定

<!-- 
        Oracle資料庫配置:oracle使用的序列自增的                
    -->
    <insert id="addEmp" parameterType="com.du.mybatis.bean.Employee" databaseId="oracle">
        <!-- 
            keyProperty:查詢後的主鍵封裝給哪個欄位
            order="BEFORE":當前sql在插入之前執行
            resultType="Integer":主鍵返回值型別
         -->
        <selectKey keyProperty="id" order="BEFORE" resultType="Integer">
            <!-- 編寫查詢主鍵的SQL -->
            select EMPLOYEE_SEQ.nextval from dual
        </selectKey>
        insert into tbl_employee (last_name, email, gender)
        values(#{lastName},#{email},#{gender})
    </insert>


如果sql裡使用了EMPLOYEE_SEQ.nextval,需要進行如下配置

<!-- 
        Oracle資料庫配置:oracle使用的序列自增的                
    -->
    <insert id="addEmp" parameterType="com.du.mybatis.bean.Employee" databaseId="oracle">
        <!-- 
            keyProperty:查詢後的主鍵封裝給哪個欄位
            order="BEFORE":當前sql在插入之前執行
            resultType="Integer":主鍵返回值型別
         -->
        <selectKey keyProperty="id" order="AFTER" resultType="Integer">
            <!-- 編寫查詢主鍵的SQL -->
            select EMPLOYEE_SEQ.currval from dual
        </selectKey>
        insert into tbl_employee (id,last_name, email, gender)
        values(EMPLOYEE_SEQ.nextval,#{lastName},#{email},#{gender})
    </insert>