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

mybatis相同的sql查詢第二次查不出結(jié)果問(wèn)題

 更新時(shí)間:2022年01月21日 15:22:58   作者:暗香撫動(dòng)  
這篇文章主要介紹了mybatis相同的sql查詢第二次查不出結(jié)果問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

相同的sql查詢第二次查不出結(jié)果問(wèn)題

問(wèn)題分析

今天在做公司業(yè)務(wù),大致是用戶傳來(lái)訂單號(hào)(買卡)和手機(jī)號(hào)對(duì)其進(jìn)行卡綁定,其中如果已經(jīng)操作過(guò)則返回操作后的狀態(tài),問(wèn)題出現(xiàn)在如果是項(xiàng)目啟動(dòng)第一次訪問(wèn),會(huì)正常返回結(jié)果,第二次訪問(wèn)時(shí)會(huì)報(bào)找不到卡信息的錯(cuò)誤,但是代碼是同一個(gè),查詢語(yǔ)句也一樣,為什么會(huì)出現(xiàn)這種情況?找遍百度,未果,自己摸索著尋找問(wèn)題。

問(wèn)題探索

首先對(duì)查詢方法進(jìn)行了排除,未果;然后尋找代碼中問(wèn)題,發(fā)現(xiàn)遍歷卡信息(可找到多張卡)時(shí),對(duì)于已經(jīng)操作過(guò)的會(huì)進(jìn)行remove()操作,注釋掉這行,程序有結(jié)果,但是會(huì)重新更新卡信息,不是需要的結(jié)果;最后發(fā)現(xiàn)是對(duì)list進(jìn)行remove()操作時(shí)都會(huì)出錯(cuò),于是聯(lián)想到了MyBatis的緩存。

MyBatis緩存介紹

一級(jí)緩存:即session緩存,作用域?yàn)?Session,當(dāng) Session flush 或 close 之后,該Session中的所有 Cache 就將清空,默認(rèn)開(kāi)啟。注意:集成spring(使用mybatis-spring)時(shí):

每次查詢spring會(huì)重新創(chuàng)建SqlSession,所以一級(jí)緩存是不生效的;

而當(dāng)開(kāi)啟事務(wù)時(shí),spring會(huì)使用同一個(gè)SqlSession做查詢,所以這個(gè)情況下一級(jí)緩存是生效的。

二級(jí)緩存:即全局緩存,其作用域?yàn)?Mapper(Namespace),默認(rèn)關(guān)閉。

問(wèn)題原因

上述提到了MyBatis的緩存機(jī)制,查看項(xiàng)目配置后發(fā)現(xiàn)問(wèn)題在于第一次查詢到結(jié)果會(huì)放到緩存中,程序?qū)Σ榈降慕Y(jié)果list進(jìn)行了remove操作,所以緩存中的list會(huì)發(fā)生變化,第二次查詢時(shí)會(huì)從緩存中將操作過(guò)的list查找出來(lái)(mybatis返回的實(shí)體類的內(nèi)存地址是相同的),故而產(chǎn)生了我們不需要的結(jié)果,之前項(xiàng)目中使用的是與Spring集成的,使用的session是SqlSessionTemplate,這里是默認(rèn)關(guān)閉了一級(jí)緩存,而今天項(xiàng)目中沒(méi)有與Spring集成,創(chuàng)建session使用的是SqlsessionFactory的openSession()方法,這里查找時(shí)默認(rèn)會(huì)先從緩存中查詢,綜上,第二次我們查到的只是緩存中的數(shù)據(jù)[2]。

解決方案

既然第二次會(huì)從緩存中讀數(shù)據(jù),不可能修改項(xiàng)目配置關(guān)閉一級(jí)緩存,所以可以通過(guò)刷新緩存來(lái)達(dá)到我們所需要的目的

方案一:通過(guò)SqlSessionUtils.getSqlSession(sqlSessionFactory).clearCache()方法刷新緩存

方案二:在mapper.xml對(duì)應(yīng)的查找語(yǔ)句中添加flushCache="true"

<select id="selectCardInfoByOrderId" resultType="xxx" parameterType="java.util.Map" flushCache="true"></select>

mybatis條件查詢?nèi)菀子鲆?jiàn)的錯(cuò)誤

在使用mybatis的條件查詢時(shí),

一不小心就容易出現(xiàn)這個(gè)錯(cuò)誤

19-Dec-2017 16:04:38.742 嚴(yán)重 [http-nio-8090-exec-6] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [SpringMVC] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'endoscopeType' in 'class java.lang.String'] with root cause org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'endoscopeType' in 'class java.lang.String'at org.apache.ibatis.reflection.Reflector.getGetInvoker(Reflector.java:380)at org.apache.ibatis.reflection.MetaClass.getGetInvoker(MetaClass.java:170)at org.apache.ibatis.reflection.wrapper.BeanWrapper.getBeanProperty(BeanWrapper.java:152)at org.apache.ibatis.reflection.wrapper.BeanWrapper.get(BeanWrapper.java:48)

這是mapper.xml文件:

<select id="findByEndoscopeType" resultMap="BaseResultMap" parameterType="java.lang.String">
? ? SELECT *
? ? FROM endoscope
? ? <where>
? ? ? ? <if test="endoscopeType != null">
? ? ? ? ? ? endoscope_type = #{endoscopeType,jdbcType=VARCHAR}
? ? ? ? </if>
? ? </where>
</select>

出錯(cuò)的原因是因?yàn)榧由?<if> 標(biāo)簽時(shí),endoscope屬性沒(méi)有包含在String endoscopeType中

兩種解決方法

1.將<if>標(biāo)簽去掉;

2.傳入?yún)?shù)放在對(duì)象中傳進(jìn)來(lái);

<select id="findByEndoscopeType" resultMap="BaseResultMap" parameterType="com.iel.endoscope.entity.Endoscope">
? ? SELECT *
? ? FROM endoscope
? ? <where>
? ? ? ? <if test="endoscopeType != null">
? ? ? ? ? ? endoscope_type = #{endoscopeType,jdbcType=VARCHAR}
? ? ? ? </if>
? ? </where>
</select>

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

相關(guān)文章

  • 關(guān)于maven本地倉(cāng)庫(kù)的配置方式

    關(guān)于maven本地倉(cāng)庫(kù)的配置方式

    這篇文章主要介紹了關(guān)于maven本地倉(cāng)庫(kù)的配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • mybatis and,or復(fù)合查詢操作

    mybatis and,or復(fù)合查詢操作

    這篇文章主要介紹了mybatis and,or復(fù)合查詢操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • SpringBoot中@EnableAutoConfiguration注解的實(shí)現(xiàn)

    SpringBoot中@EnableAutoConfiguration注解的實(shí)現(xiàn)

    Spring Boot@EnableAutoConfiguration是一個(gè)強(qiáng)大的工具,可以簡(jiǎn)化配置過(guò)程,從而實(shí)現(xiàn)快速開(kāi)發(fā),本文主要介紹了SpringBoot中@EnableAutoConfiguration注解的實(shí)現(xiàn),感興趣的可以了解一下
    2024-01-01
  • java代碼規(guī)范之不合理命名與重復(fù)代碼示例詳解

    java代碼規(guī)范之不合理命名與重復(fù)代碼示例詳解

    這篇文章主要為大家介紹了java代碼規(guī)范之不合理命名與重復(fù)代碼示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Hibernate分頁(yè)的兩種實(shí)現(xiàn)方法

    Hibernate分頁(yè)的兩種實(shí)現(xiàn)方法

    這篇文章主要介紹了Hibernate分頁(yè)的兩種實(shí)現(xiàn)方法,結(jié)合實(shí)例形式講述了criteria分頁(yè)與hql分頁(yè)的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2016-03-03
  • 如何用ObjectMapper將復(fù)雜Map轉(zhuǎn)換為實(shí)體類

    如何用ObjectMapper將復(fù)雜Map轉(zhuǎn)換為實(shí)體類

    這篇文章主要介紹了如何用ObjectMapper將復(fù)雜Map轉(zhuǎn)換為實(shí)體類的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java?天生就是多線程

    Java?天生就是多線程

    這篇文章主要介紹了Java天生就是多線程,程序天生就是多線程程序,因?yàn)閳?zhí)行main()方法的是一個(gè)名稱為main的線程,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-07-07
  • java實(shí)現(xiàn)微信公眾號(hào)發(fā)送模版消息

    java實(shí)現(xiàn)微信公眾號(hào)發(fā)送模版消息

    這篇文章以訂單推送為例,主要為大家詳細(xì)介紹了java實(shí)現(xiàn)微信公眾號(hào)發(fā)送模版消息,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • JAVA字符串格式化-String.format()的使用

    JAVA字符串格式化-String.format()的使用

    本篇文章主要介紹了JAVA字符串格式化-String.format()的使用,具有一定的參考價(jià)值,有需要的可以了解一下。
    2016-11-11
  • Redis Lettuce連接redis集群實(shí)現(xiàn)過(guò)程詳細(xì)講解

    Redis Lettuce連接redis集群實(shí)現(xiàn)過(guò)程詳細(xì)講解

    這篇文章主要介紹了Redis Lettuce連接redis集群實(shí)現(xiàn)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-01-01

最新評(píng)論

扬州市| 连山| 宁海县| 四会市| 林口县| 凤城市| 建阳市| 抚顺市| 北碚区| 金沙县| 林甸县| 墨竹工卡县| 洮南市| 吉隆县| 双峰县| 商丘市| 织金县| 红桥区| 铜鼓县| 长治县| 民县| 泰兴市| 乳山市| 长子县| 上林县| 四子王旗| 南岸区| 台东县| 兖州市| 雷山县| 安宁市| 沐川县| 新野县| 巢湖市| 通化市| 宁城县| 新闻| 巴楚县| 台湾省| 神木县| 温宿县|