詳解mybatis插入數據後返回自增主鍵ID的問題

1.場景介紹:

​開發過程中我們經常性的會用到許多的中間表,用於數據之間的對應和關聯.這個時候我們關聯最多的就是ID,我們在一張表中插入數據後級聯增加到關聯表中.我們熟知的mybatis在插入數據後返回的是插入成功的條數,那麼這個時候我們想要得到相應的這條新增數據的ID,該怎麼辦呢?

2.插入數據返回自增主鍵ID方法(一)

在映射器中配置獲取記錄主鍵值xml映射:

在xml中定義useGeneratedKeys為true,返回主鍵id的值,keyProperty和keyColumn分別代表數據庫記錄主鍵字段和java對象成員屬性名

<!-- 插入數據:返回記錄主鍵id值 -->
<insert id="insert" useGeneratedKeys="true" keyProperty="id"  keyColumn="id">
		insert  into stu (name,age) values (#{name},#{age})
</insert>

接口映射器

在接口映射器中通過註解@Options分別設置參數useGeneratedKeys,keyProperty,keyColumn值

// 返回主鍵字段id值
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
@Insert("insert  into stu (name,age) values (#{name},#{age})")
void insert(Student stu);

獲取新添加記錄主鍵字段值

需要註意的是,在MyBatis中添加操作返回的是記錄數並非記錄主鍵id。因此,如果需要獲取新添加記錄的主鍵值,需要在執行添加操作之後,直接讀取Java對象的主鍵屬性。

Integer rows = sqlSession.getMapper(StuMapper.class).insertOneTest(student);
System.out.println("rows = " + rows); // 添加操作返回記錄數
System.out.println("id = " + student.getId()); // 執行添加操作之後通過Java對象獲取主鍵屬性值

添加批量記錄時返回主鍵ID

如果希望執行批量添加並返回各記錄主鍵字段值,隻能在xml映射器中實現,在接口映射器中無法做到。

<!-- 批量添加數據,並返回主鍵字段 -->
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
		insert  into stu (name,age) values
		<foreach collection="list" separator="," item="t">
			(#{t.name},#{t.age})
		</foreach>
</insert>

可以看到,執行批量添加並返回記錄主鍵值的xml映射器配置,跟添加單條記錄時是一致的。不同的地方僅僅是使用瞭foreach元素構建批量添加語句。

到此這篇關於mybatis插入數據後返回自增主鍵ID詳解的文章就介紹到這瞭,更多相關mybatis插入數據後返回自增主鍵ID詳解內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: