最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis/MyBatis-Plus同事務(wù)循環(huán)調(diào)用存儲過程獲取主鍵重復(fù)問題分析及解決

 更新時間:2025年09月24日 15:42:26   作者:Meta39  
MyBatis默認開啟一級緩存,同一事務(wù)中循環(huán)調(diào)用查詢方法時會重復(fù)使用緩存數(shù)據(jù),導(dǎo)致獲取的序列主鍵值均為1,需在需要動態(tài)數(shù)據(jù)(如Oracle序列、存儲過程主鍵)時禁用緩存,避免緩存干擾查詢結(jié)果

問題

mybatis有如下代碼獲取序列作為主鍵

IdMapper.java

    @Select("SELECT TABLE.NEXTVAL FROM DUAL")
    String getId();

同一事務(wù)循環(huán)調(diào)用查詢偽代碼

	@Transactional(rollbackFor = Exception.class)
	public QueryMedicalFeeRes queryMedicalFee(QueryMedicalFeeReq req) {
		for (Obj o : objs) {
			Long id = idMapper.getId();
			log.info("id{}",id);
		}
	}

輸出如下:id都是1

id1
id1
id1
id1

原因

因為MyBatis的一級緩存導(dǎo)致的。而且MyBatis默認開啟一級緩存,這樣就會導(dǎo)致循環(huán)調(diào)用查詢方法的時候,直接從緩存獲取,不會查詢數(shù)據(jù)庫,從而獲取到的數(shù)據(jù)都是緩存數(shù)據(jù)。

但請注意,并不是所有查詢都不使用一級緩存!而是當(dāng)你需要查詢的內(nèi)容是需要變化的時候才要禁用一級緩存。如:查詢Oracle的序列、查詢存儲過程獲取主鍵值等情況才需要禁用一級緩存。

解決辦法

禁用一級緩存

<select id="getId" resultType="java.lang.Long" useCache="false" flushCache="true">
    SELECT TABLE.NEXTVAL AS ID FROM DUAL
</select>
    @Select("SELECT TABLE.NEXTVAL FROM DUAL")
    @Options(useCache = false, flushCache = Options.FlushCachePolicy.TRUE)
    String getId();

如果是存儲過程

<select id="getId" resultType="java.lang.Long" statementType="CALLABLE" useCache="false" flushCache="true">
    {call GET_NEXT_ID(#{identity,mode=IN,jdbcType=VARCHAR},#{tableName,mode=IN,jdbcType=VARCHAR},#{count,mode=IN,jdbcType=INTEGER},#{currentNo,mode=OUT,jdbcType=INTEGER})}
</select>
```java
    @Select("{call GET_NEXT_ID(#{identity,mode=IN,jdbcType=VARCHAR},#{tableName,mode=IN,jdbcType=VARCHAR},#{count,mode=IN,jdbcType=INTEGER},#{currentNo,mode=OUT,jdbcType=INTEGER})}")
    @Options(statementType = StatementType.CALLABLE, useCache = false, flushCache = Options.FlushCachePolicy.TRUE)
    String getId();

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Apache?SkyWalking?監(jiān)控?MySQL?Server?實戰(zhàn)解析

    Apache?SkyWalking?監(jiān)控?MySQL?Server?實戰(zhàn)解析

    這篇文章主要介紹了Apache?SkyWalking?監(jiān)控?MySQL?Server?實戰(zhàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • webuploader在springMVC+jquery+Java開發(fā)環(huán)境下的大文件分片上傳的實例代碼

    webuploader在springMVC+jquery+Java開發(fā)環(huán)境下的大文件分片上傳的實例代碼

    這篇文章主要介紹了webuploader在springMVC+jquery+Java開發(fā)環(huán)境下的大文件分片上傳的實例代碼,需要的朋友可以參考下
    2017-04-04
  • Java?BoxLayout(盒子布局)布局管理器解析

    Java?BoxLayout(盒子布局)布局管理器解析

    這篇文章主要介紹了Java?BoxLayout(盒子布局)布局管理器解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java性能調(diào)優(yōu)System的gc垃圾回收方法

    java性能調(diào)優(yōu)System的gc垃圾回收方法

    這篇文章主要為大家介紹了java性能調(diào)優(yōu)System的gc垃圾回收方法示例解析有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • Java webSerivce的使用看完你就明白了

    Java webSerivce的使用看完你就明白了

    因為前段時間,需要使用到webService來調(diào)用公司的其他系統(tǒng)api接口,但是請求方式和我熟知的http請求不一樣,是基于soap協(xié)議來傳輸xml數(shù)據(jù)格式,請求的參數(shù)極其復(fù)雜,需要封裝多層xml數(shù)據(jù)格式,并且我不知道對方的api接口是什么語言,甚至不知道他們存在于什么平臺
    2022-03-03
  • Spring整合redis(jedis)實現(xiàn)Session共享的過程

    Spring整合redis(jedis)實現(xiàn)Session共享的過程

    這篇文章主要介紹了Spring整合redis(jedis)實現(xiàn)Session共享,需要的朋友可以參考下
    2018-06-06
  • Activiti explorer.war示例工程使用過程圖解

    Activiti explorer.war示例工程使用過程圖解

    這篇文章主要介紹了Activiti explorer.war示例工程使用過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Java如何連接數(shù)據(jù)庫圖文教程

    Java如何連接數(shù)據(jù)庫圖文教程

    關(guān)于java數(shù)據(jù)庫的文章早已是非常多了,本文是對我個人過往學(xué)習(xí)java數(shù)據(jù)庫,理解及應(yīng)用java數(shù)據(jù)庫的一個總結(jié),下面這篇文章主要給大家介紹了關(guān)于Java如何連接數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • Spring Boot實現(xiàn)數(shù)據(jù)訪問計數(shù)器方案詳解

    Spring Boot實現(xiàn)數(shù)據(jù)訪問計數(shù)器方案詳解

    在Spring Boot項目中,有時需要數(shù)據(jù)訪問計數(shù)器,怎么實現(xiàn)數(shù)據(jù)訪問計數(shù)器呢?下面小編給大家?guī)砹薙pring Boot數(shù)據(jù)訪問計數(shù)器的實現(xiàn)方案,需要的朋友參考下吧
    2021-08-08
  • idea mabatisX插件生成mapper.xml文件全過程

    idea mabatisX插件生成mapper.xml文件全過程

    文章介紹了如何在IntelliJ IDEA中使用MybatisX插件自動生成MyBatis的Mapper和XML文件,步驟包括安裝插件、選擇數(shù)據(jù)庫表并右鍵選擇MybatisX-Generator進行配置和生成
    2026-03-03

最新評論

武功县| 宁强县| 兰考县| 清涧县| 金昌市| 西充县| 海口市| 合江县| 鹤壁市| 巫山县| 滨海县| 阿城市| 渭南市| 邓州市| 合阳县| 张家界市| 牡丹江市| 太谷县| 汕尾市| 普兰店市| 贵港市| 册亨县| 扶风县| 潍坊市| 中山市| 多伦县| 凉城县| 库尔勒市| 浮山县| 孟州市| 金昌市| 农安县| 册亨县| 阿克陶县| 北流市| 五华县| 黔江区| 南乐县| 商水县| 丹凤县| 宣化县|