1. 程式人生 > 程式設計 >Mybatis實現插入資料後返回主鍵過程解析

Mybatis實現插入資料後返回主鍵過程解析

新增記錄後獲取主鍵ID,這是一個很常見的需求,特別是在一次前端呼叫中需要插入多個表的場景。

除了新增單條記錄時獲取主鍵值,有時候可能需要獲取批量新增記錄時各記錄的主鍵值,MyBatis從3.3.1版本開始支援批量新增記錄並返回各記錄主鍵欄位值。

一、獲取新新增記錄主鍵欄位值

注意: 在MyBatis中新增操作返回的是記錄數並非記錄主鍵id。

如果需要獲取新新增記錄的主鍵值,需要在執行新增操作之後,直接讀取Java物件的主鍵屬性。

Integer rows = sqlSession.getMapper(UserMapper.class).insertUser(user);
System.out.println("rows = " + rows); // 新增操作返回記錄數

System.out.println("id = " + user.getId()); // 執行新增操作之後通過Java物件獲取主鍵屬性值

二、在對映器中配置獲取記錄主鍵值

1.xml對映器

在定義xml對映器時設定屬性useGeneratedKeys值為true,並分別指定屬性keyProperty和keyColumn為對應的資料庫記錄主鍵欄位與Java物件的主鍵屬性。

1.1 插入單條記錄

<mapper namespace="com.dafeng.dao.mapper">
	<!-- 插入資料:返回記錄主鍵id值 -->
	<insert id="insertUser" parameterType="com.dafeng.model.User" useGeneratedKeys="true" keyProperty="id" keyColumn="id" >
	  insert into user(name,age,create_time,update_time) values(#{name},#{age},now(),now())
	</insert>
</mapper>

1.2 插入多條記錄

<!-- 批量新增資料,並返回主鍵欄位 -->
<insert id="insertBatchUser" useGeneratedKeys="true" keyProperty="id">
  INSERT INTO user(name,update_time) VALUES
    <foreach collection="list" separator="," item="u">
    (#{u.name},#{u.age},now())
    </foreach>
</insert>

2.介面對映器


在介面對映器中通過註解@Options分別設定引數useGeneratedKeys,keyProperty,keyColumn值

2.1 插入單條記錄

// 返回主鍵欄位id值
@Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")
@Insert("insert into user(name,now())")
Integer insertUser(User user);

2.2 插入多條記錄

如果希望執行批量新增並返回各記錄主鍵欄位值,只能在xml對映器中實現,在介面對映器中無法做到。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。