中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

springboot~mybatis中(zhong)使用selectKey獲取自(zi)增主鍵

在mybatis中,我們在insert操作之后,可以獲取到自增主鍵的值,這個需要我們用到這個方法,在使用時有一個坑需要注意,一會兒會說到。

  • 假設我們有數據表id_offset,然后id是自增主鍵
  • 我們在插入數據后,希望得到這個新插入的主鍵的值
  • 我們不希望通過兩條語句實現,因為這樣在并發時會有問題

數據結構

DROP TABLE IF EXISTS `id_offset`;
CREATE TABLE `lawfirm_id_offset`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `kgid` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
);

mybatis中的mapper文件

   <insert id="insertIdOffset" parameterType="IdOffset">
        <selectKey resultType="long" keyProperty ="id" order="AFTER">
            SELECT LAST_INSERT_ID()
        </selectKey>
        INSERT INTO lawyer_id_offset (kgid) VALUES (#{kgid})

    </insert>

java中調用它

注意,這里有個坑,獲(huo)取(qu)自增主鍵,不是獲(huo)取(qu)mapper的返回(hui)值,而是從當前實(shi)體中(zhong)獲(huo)取(qu)id,這點(dian)需要(yao)注意。

	@GetMapping("insert")
	public AjaxResult insert() {
		IdOffset idOffset = new IdOffset();
		idOffset.setKgid("ax01");
		idOffsetMapper.inserIdOffset(idOffset );
		return AjaxResult.success(idOffset.getId());
	}

解析后的SQL語句

selectKey不起作用的原因

在 MyBatis 中使用 <selectKey> 來獲取自增(zeng)主鍵值時,有時可(ke)(ke)能會(hui)出現(xian)返(fan)回 1 的(de)情況。這可(ke)(ke)能是因為在(zai) MyBatis 的(de)執行(xing)環境和命令行(xing)中執行(xing) SQL 語句的(de)方式有一些(xie)差(cha)異,導致了這種不(bu)同的(de)結果(guo)。

下面(mian)是一些可能(neng)導致此問(wen)題(ti)的原因(yin)和解決方法:

  1. 事務問題: MyBatis 默認是在事務中執行 SQL 語句的。如果你在 <insert> 中同時使用了 <selectKey>,確(que)(que)保你(ni)的(de)事務(wu)配置正(zheng)確(que)(que),事務(wu)提交之后才能正(zheng)確(que)(que)地獲取(qu)到自增主鍵值。

  2. 數據庫返回值處理問題: MyBatis 在執行 <insert> 語句后,會(hui)通(tong)過 JDBC 獲取數據(ju)庫的返(fan)(fan)回結(jie)(jie)果。如果數據(ju)庫的返(fan)(fan)回結(jie)(jie)果不符合預期,可能導(dao)致(zhi) MyBatis 返(fan)(fan)回 1。確保(bao)數據(ju)庫返(fan)(fan)回的結(jie)(jie)果和 MyBatis 預期的結(jie)(jie)果一致(zhi)。

  3. 數據庫驅動問題: 不同的數據庫驅動可能在處理 <selectKey> 時存在不同的行為(wei)。確保(bao)使用了(le)與你的數據庫兼容的驅動版本。

  4. 日志輸出: 啟用 MyBatis 的日志輸(shu)出,查看生成的 SQL 語句以(yi)及執(zhi)行(xing)情況,以(yi)便(bian)進一步分(fen)析問題。

  5. 環境問題: 確保在 MyBatis 中配置(zhi)了正確的數據庫連(lian)接信息,以(yi)及其他必要(yao)的配置(zhi)項(xiang)。

如果你已(yi)經排除(chu)了上述(shu)可能的問(wen)題(ti),但(dan)仍然無法解決,建議提供更多關于你的 MyBatis 配置、映(ying)射文件和代碼的詳細信(xin)息(xi),以及在命令行上執行 SQL 語句的方式,這樣我才能更準確地幫助你排查(cha)問(wen)題(ti)。

posted @ 2023-08-09 09:02  張占嶺  閱讀(536)  評論(0)    收藏  舉報