MyBatis 獲取insert操作返回的主鍵
阿新 • • 發佈:2019-02-16
注: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>