mybatis插入数据后返回自增主键ID详解
1.場景介紹:
? 開發(fā)過程中我們經(jīng)常性的會用到許多的中間表,用于數(shù)據(jù)之間的對應(yīng)和關(guān)聯(lián).這個時候我們關(guān)聯(lián)最多的就是ID,我們在一張表中插入數(shù)據(jù)后級聯(lián)增加到關(guān)聯(lián)表中.我們熟知的mybatis在插入數(shù)據(jù)后返回的是插入成功的條數(shù),那么這個時候我們想要得到相應(yīng)的這條新增數(shù)據(jù)的ID,該怎么辦呢?
2.插入數(shù)據(jù)返回自增主鍵ID方法(一)
在映射器中配置獲取記錄主鍵值
- xml映射:
在xml中定義useGeneratedKeys為true,返回主鍵id的值,keyProperty和keyColumn分別代表數(shù)據(jù)庫記錄主鍵字段和java對象成員屬性名
<!-- 插入數(shù)據(jù):返回記錄主鍵id值 --> <insert id="insert" useGeneratedKeys="true" keyProperty="id" keyColumn="id">insert into stu (name,age) values (#{name},#{age}) </insert>- 接口映射器
在接口映射器中通過注解@Options分別設(shè)置參數(shù)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中添加操作返回的是記錄數(shù)并非記錄主鍵id。因此,如果需要獲取新添加記錄的主鍵值,需要在執(zhí)行添加操作之后,直接讀取Java對象的主鍵屬性。
Integer rows = sqlSession.getMapper(StuMapper.class).insertOneTest(student); System.out.println("rows = " + rows); // 添加操作返回記錄數(shù) System.out.println("id = " + student.getId()); // 執(zhí)行添加操作之后通過Java對象獲取主鍵屬性值添加批量記錄時返回主鍵ID
如果希望執(zhí)行批量添加并返回各記錄主鍵字段值,只能在xml映射器中實現(xiàn),在接口映射器中無法做到。
<!-- 批量添加數(shù)據(jù),并返回主鍵字段 --> <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>可以看到,執(zhí)行批量添加并返回記錄主鍵值的xml映射器配置,跟添加單條記錄時是一致的。不同的地方僅僅是使用了foreach元素構(gòu)建批量添加語句。
轉(zhuǎn)載于:https://www.cnblogs.com/charlypage/p/11253610.html
總結(jié)
以上是生活随笔為你收集整理的mybatis插入数据后返回自增主键ID详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WINDOWS10鼠标驱动如何重装?
- 下一篇: Delphi下实现全屏快速找图找色 二、