動力節(jié)點-始于2009年,口口相傳的Java黃埔軍校 400-8080-105

免費學前測評 領取最新教程資料

查看家門口的動力節(jié)點
當前位置: 首頁 > 行業(yè)快訊 > 讓我們深入的了解下mybatis返回主鍵id

讓我們深入的了解下mybatis返回主鍵id

來源: 動力節(jié)點 時間:2023-04-23 08:43:00

  • 免費預約測評,鑒定適合再學
  • 4大方法+專家考評團把關
  • 預約成功即送15天零基礎面授課

今日已有176人預約測評

  • 張同學137****9950預約成功
  • 歐陽同學186****9232預約成功
  • 趙同學132****3458預約成功
  • 李同學137****4580預約成功
  • 趙同學180****1218預約成功
  • 蔡同學186****2232預約成功

添加單一記錄時返回主鍵ID

添加一條記錄時返回主鍵值,在xml映射器和接口映射器中都可以實現(xiàn)。

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

xml映射器

在定義xml映射器時設置屬性useGeneratedKeys值為true,并分別指定屬性keyProperty和keyColumn為對應的數(shù)據(jù)庫記錄主鍵字段與Java對象的主鍵屬性。


	
	
		insert into test(name,descr,url,create_time,update_time) 
		values(#{name},#{descr},#{url},now(),now())
	

接口映射器

在接口映射器中通過注解@Options分別設置參數(shù)useGeneratedKeys,keyProperty,keyColumn值

// 返回主鍵字段id值
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
@Insert("insert into test(name,descr,url,create_time,update_time) values(#{name},#{descr},#{url},now(),now())")
Integer insertOneTest(Test test);

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

需要注意的是,在MyBatis中添加操作返回的是記錄數(shù)并非記錄主鍵id。因此,如果需要獲取新添加記錄的主鍵值,需要在執(zhí)行添加操作之后,直接讀取Java對象的主鍵屬性。

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

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

如果希望執(zhí)行批量添加并返回各記錄主鍵字段值,只能在xml映射器中實現(xiàn),在接口映射器中無法做到。



	INSERT INTO test(name,descr,url,create_time,update_time) VALUES
		
		(#{t.name},#{t.descr},#{t.url},now(),now())
		

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

獲取主鍵ID實現(xiàn)原理

需要注意的是,不論在xml映射器還是在接口映射器中,添加記錄的主鍵值并非添加操作的返回值。實際上,在MyBatis中執(zhí)行添加操作時只會返回當前添加的記錄數(shù)。

package org.apache.ibatis.executor.statement;
public class PreparedStatementHandler extends BaseStatementHandler {
	@Override
    public int update(Statement statement) throws SQLException {
        PreparedStatement ps = (PreparedStatement) statement;
        // 真正執(zhí)行添加操作的SQL語句
        ps.execute();
        int rows = ps.getUpdateCount();
        Object parameterObject = boundSql.getParameterObject();
        KeyGenerator keyGenerator = mappedStatement.getKeyGenerator();
        // 在執(zhí)行添加操作完畢之后,再處理記錄主鍵字段值
        keyGenerator.processAfter(executor, mappedStatement, ps, parameterObject);
        // 添加記錄時返回的是記錄數(shù),而并非記錄的主鍵字段值
        return rows;
    }
}

順便看一下MyBatis添加操作的時序圖:

跟蹤時序圖執(zhí)行步驟可以看到,MyBatis最終是通過MySQL驅動程序獲取到了新添加的記錄主鍵值。

以上就是動力節(jié)點小編介紹的"讓我們深入的了解下mybatis返回主鍵id",希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為您務。

上海Java培訓講師師資團隊 >更多

杜老師 Linux專家 大廠技術顧問專家 被譽為“Java教父”

孫老師 知名IT作家 原復旦大學教授 國內首批架構師骨干

Cat老師 資深架構師 億級交易架構保障專家 擅長高并發(fā)高性能高可用

郭老師 高級軟件工程師 曾任技術總監(jiān) 擅長大型金融/銀行支付業(yè)務

秦老師 原阿里高級工程師 資深系統(tǒng)架構師 精通云計算物聯(lián)網(wǎng)底層技術

王老師 高級軟件工程師 擅長零基礎實戰(zhàn)教學 被譽為“Java啟蒙天后”

楊老師 資深軟件工程師 北京奧運場館人臉信息采集項目負責人

王老師 曾任某上市公司系統(tǒng)架構師 分布式,微服務實戰(zhàn)應用專家

崔老師 特派海歸軟件工程師 曾任百度資深架構師

上海開班

>更多

Java實驗班 2024-10-26 即將報滿

Java實驗班 2024-11-26 即將報滿

Java實驗班 2024-12-27 即將報滿

Java就業(yè)班 2024-11-12 即將報滿

Java就業(yè)班 2024-12-12 即將報滿

Java就業(yè)班 2025-01-11 即將報滿

熱搜標簽

Java培訓班學費 Java培訓班畢業(yè)找工作 零基礎學Java好找工作嗎 Java程序員好找工作嗎 自學Java好找工作嗎 學Java能做什么工作 Java就業(yè)前景 學Java要學多久 零基礎學Java難嗎 培訓班學Java怎么樣 什么樣的人適合學Java Java培訓多少錢 Java培訓班靠譜嗎
400-8080-105 在線咨詢3秒即回
官方微信 隨時了解最新動態(tài)
掃一掃進入 動力節(jié)點手機站

運營主體北京動力節(jié)點教育科技有限公司,屬具備計算機技術培訓資質的教育培訓機構