1.問題:
開發過程中,經常遇到這樣的情況,多表關聯操作,第一個表的資料插入後,需要傳回id 供後面的操作使用,後續的表要使用該字段進行資料的關聯。預設狀态下,mybatis在插入資料後傳回的是插入成功的條數 1 , 如果我們想要得到這條新增資料的ID,咋辦?
2.插入資料傳回自增主鍵ID方法(一)
在映射器中配置擷取記錄主鍵值
- xml映射:
在xml中定義useGeneratedKeys為true,傳回主鍵id的值,keyProperty和keyColumn分别代表資料庫記錄主鍵字段和java對象成員屬性名
insert into user (name,pwd,phone) values (#{name},#{pwd},#{phone})
- 接口映射器
在接口映射器中通過注解@Options分别設定參數useGeneratedKeys,keyProperty,keyColumn值
// 傳回主鍵字段id值@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")@Insert("insert into user (name,pwd,phone) values (#{name},#{pwd},#{phone})")void insert(Student stu);
擷取新添加記錄主鍵字段值
在MyBatis中添加操作傳回的是記錄數并非記錄主鍵id。是以,如果需要擷取新添加記錄的主鍵值,需要在執行添加操作之後,直接讀取Java對象的主鍵屬性。
Integer rows = sqlSession.getMapper(UserMapper.class).insertOneTest(user);System.out.println("rows = " + rows); // 添加操作傳回記錄數System.out.println("id = " + user.getId()); // 執行添加操作之後通過Java對象擷取主鍵屬性值
添加批量記錄時傳回主鍵ID
如果希望執行批量添加并傳回各記錄主鍵字段值,隻能在xml映射器中實作,在接口映射器中無法做到。
insert into user (name,pwd,phone) values (#{t.name},#{t.pwd},#{phone})
可以看到,執行批量添加并傳回記錄主鍵值的xml映射器配置,跟添加單條記錄時是一緻的。不同的地方僅僅是使用了foreach元素建構批量添加語句。