黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 讓我們深入的了解下mybatis返回主鍵id

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

更新時(shí)間:2023-02-17 17:06:26 來源:動力節(jié)點(diǎn) 瀏覽5352次

添加單一記錄時(shí)返回主鍵ID

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

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

xml映射器

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

<mapper namespace="org.chench.test.mybatis.mapper">
	<!-- 插入數(shù)據(jù):返回記錄主鍵id值 -->
	<insert id="insertOneTest" parameterType="org.chench.test.mybatis.model.Test" useGeneratedKeys="true" keyProperty="id" keyColumn="id" >
		insert into test(name,descr,url,create_time,update_time) 
		values(#{name},#{descr},#{url},now(),now())
	</insert>
</mapper>

接口映射器

在接口映射器中通過注解@Options分別設(shè)置參數(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對象獲取主鍵屬性值

添加批量記錄時(shí)返回主鍵ID

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

<!-- 批量添加數(shù)據(jù),并返回主鍵字段 -->
<insert id="insertBatchTest" useGeneratedKeys="true" keyProperty="id">
	INSERT INTO test(name,descr,url,create_time,update_time) VALUES
		<foreach collection="list" separator="," item="t">
		(#{t.name},#{t.descr},#{t.url},now(),now())
		</foreach>
</insert>

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

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

需要注意的是,不論在xml映射器還是在接口映射器中,添加記錄的主鍵值并非添加操作的返回值。實(shí)際上,在MyBatis中執(zhí)行添加操作時(shí)只會返回當(dāng)前添加的記錄數(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í)返回的是記錄數(shù),而并非記錄的主鍵字段值
        return rows;
    }
}

順便看一下MyBatis添加操作的時(shí)序圖:

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

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

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 精品一区二区三区视频 | 日韩久草 | 日本在线资源 | 成人勉费视频 | 91成人精品视频 | 日韩视频不卡 | 国产日韩欧美一区二区三区视频 | 亚洲人成网站色7799在线播放 | 涩涩免费视频 | 无遮挡一级毛片 | 一级免费黄色录像 | 日本不卡视频在线观看 | 奇米影视综合网 | 欧美中文字幕一区二区三区 | 精品国偷自产在线视频99 | 免费aⅴ在线 | 国产中文99视频在线观看 | 色婷婷狠狠 | 国产99视频精品免视看7 | 欧美激情精品久久久久 | 欧美三级黄视频 | 国产亚洲欧美日韩综合综合二区 | 欧美日韩国产另类一区二区三区 | 欧美xxxx做受欧美88bbw | 香蕉视频啊啊啊 | 免费网站18 | 伊人精品线视天天综合 | 99pao在线视频成精品 | 2020国产成人精品视频人 | 色中色欧美| 亚洲波多野结衣 | 中文字幕一区二区三区乱码aⅴ | 婷婷在线网 | 黄网在线免费观看 | 亚洲欧洲国产精品 | 操操日日 | 中文字幕第10页 | 亚洲国产精品久久网午夜 | 在线视频国产一区 | 欧美成人高清视频 | 日日干视频 |