在使用mysql數據庫做一些新增數據業務時,比如說一張表有個自增主鍵id,在新增一條數據后想要返回新增的這條數據的id值用於后續業務使用,在使用mybatis做持久化管理,xml中可以使用如下方式:
<insert id="insertClientLog" parameterType="TClientLog"> <selectKey keyProperty="serialNo" order="AFTER" resultType="integer"> select LAST_INSERT_ID() </selectKey> insert into pub_tclientlogfile( operate_date, operate_time, remark, del_status ) values ( #{operateDate}, #{operateTime} #{remark}, #{delStatus} ) </insert>
說明:
使用mysql的LAST_INSERT_ID()方法獲取插入記錄的主鍵,設置在插入數據后,即order屬性設置為after,使用select LAST_INSERT_ID()查詢並返回新插入數據的主鍵值。
keyProperty:將查詢到的主鍵值設置到對應實體類的主鍵屬性字段。
order:<selectKey> 標簽內的sql語句相對於insert語句的執行順序配置,可以為BEFORE、AFTER,AFTER表示select LAST_INSERT_ID()這個語句將在insert語句之后執行。
或者使用如下方式:
<insert id="insertClientLog" useGeneratedKeys="true" keyProperty="serialNo" parameterType="TClientLog"> insert into pub_tclientlogfile( operate_date, operate_time, remark, del_status ) values ( #{operateDate}, #{operateTime} #{remark}, #{delStatus} ) </insert>
說明:
useGeneratedKeys:設置是否使用jdbc的getGenereatedKeys方法獲取主鍵並賦值到keyProperty設置的屬性。
keyProperty:將查詢到的主鍵值設置到對應實體類的主鍵屬性字段。
對應mapper方法:
void insertClientLog(TClientLog clientLog);
使用時使用入參的getXxx方法來獲取對應的結果值:
//調用插入方法 clientLogMapper.insertClientLog(clientLog); //使用入參的getXxx方法返回結果值 System.out.println("serialNo:" + clientLog.getSerialNo());
結果如下圖所示: