1.場景介紹:
?開發過程中我們經常性的會用到許多的中間表,用于數據之間的對應和關聯.這個時候我們關聯最多的就是ID,我們在一張表中插入數據后級聯增加到關聯表中.我們熟知的mybatis在插入數據后返回的是插入成功的條數,那么這個時候我們想要得到相應的這條新增數據的ID,該怎么辦呢?
2.插入數據返回自增主鍵ID方法(一)
在映射器中配置獲取記錄主鍵值xml映射:
在xml中定義useGeneratedKeys為true,返回主鍵id的值,keyProperty和keyColumn分別代表數據庫記錄主鍵字段和java對象成員屬性名
1
2
3
4
|
<!-- 插入數據:返回記錄主鍵id值 --> <insert id= "insert" useGeneratedKeys= "true" keyProperty= "id" keyColumn= "id" > insert into stu (name,age) values (#{name},#{age}) </insert> |
接口映射器
在接口映射器中通過注解@Options
分別設置參數useGeneratedKeys,keyProperty,keyColumn值
1
2
3
4
|
// 返回主鍵字段id值 @Options (useGeneratedKeys = true , keyProperty = "id" , keyColumn = "id" ) @Insert ( "insert into stu (name,age) values (#{name},#{age})" ) void insert(Student stu); |
獲取新添加記錄主鍵字段值
需要注意的是,在MyBatis中添加操作返回的是記錄數并非記錄主鍵id。因此,如果需要獲取新添加記錄的主鍵值,需要在執行添加操作之后,直接讀取Java對象的主鍵屬性。
1
2
3
|
Integer rows = sqlSession.getMapper(StuMapper. class ).insertOneTest(student); System.out.println( "rows = " + rows); // 添加操作返回記錄數 System.out.println( "id = " + student.getId()); // 執行添加操作之后通過Java對象獲取主鍵屬性值 |
添加批量記錄時返回主鍵ID
如果希望執行批量添加并返回各記錄主鍵字段值,只能在xml映射器中實現,在接口映射器中無法做到。
1
2
3
4
5
6
7
|
<!-- 批量添加數據,并返回主鍵字段 --> <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詳解內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.cnblogs.com/charlypage/p/11253610.html