天天看點

mybatis plus insert傳回主鍵_mybatis 傳回 主鍵 的解惑

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元素建構批量添加語句。

mybatis plus insert傳回主鍵_mybatis 傳回 主鍵 的解惑

繼續閱讀