招商平臺(tái)公司山西seo排名
前言
方向從一開始就錯(cuò)了,還是執(zhí)著的去尋找問題的解決方案,簡(jiǎn)直就是一場(chǎng)重大災(zāi)難,但這也是每個(gè)修行者的必由之路。這個(gè)線上問題,差點(diǎn)讓我的心里防線崩潰,苦尋無(wú)門,最終得以解決也多虧了身邊的各路大佬的群策群力,當(dāng)然也少不了同事的一番苦情調(diào)侃?!耙粋€(gè)bug解一天”,還要我怎樣,奧力給吧。開始我們的正文吧。
正文
- 問題是這樣的,我的springboot項(xiàng)目默認(rèn)開啟了駝峰模式,所以下劃線的數(shù)據(jù)庫(kù)字段會(huì)自動(dòng)給我轉(zhuǎn)為駝峰的模式,好巧不巧的是我們的第三方客戶提供給我們的接口所有字段都是下劃線分割的,我創(chuàng)建了這些下劃線分割的屬性對(duì)象實(shí)體,在我使用mybatis插入一條數(shù)據(jù)后,然后使用該下劃線的實(shí)體屬性對(duì)象去接收剛剛插入的數(shù)據(jù),結(jié)果一直報(bào)對(duì)象為null的錯(cuò)誤。說(shuō)起來(lái)也是蠻心酸的,一直以為問題出現(xiàn)在了mybatis事務(wù)控制上,前面插入數(shù)據(jù)之后由于事務(wù)還沒有提交所以后面會(huì)查不到數(shù)據(jù),咨詢了各位大佬,也說(shuō)是這個(gè)問題導(dǎo)致的,可是使用默認(rèn)的實(shí)體是能查出數(shù)據(jù)的,很神奇的發(fā)現(xiàn)系統(tǒng)出了鬼。簡(jiǎn)直是欲哭無(wú)淚,終于經(jīng)過(guò)一整天的各種摸索,才發(fā)現(xiàn)是因?yàn)樵O(shè)置了駝峰,但是我的接收實(shí)體是下劃線聲明的屬性,所以導(dǎo)致查詢到的數(shù)據(jù)無(wú)法映射到我的實(shí)體里面,一直報(bào)null的問題,悲劇往往就出現(xiàn)在了這些小細(xì)節(jié)里面,頓時(shí)一萬(wàn)句草泥馬從腦海中飄過(guò)。哎,真的是想死的心都有了。后面直接用了很low的方案補(bǔ)救。
- 補(bǔ)救方案:
方案一:此放案是我處理這個(gè)緊急問題想到的臨時(shí)方案,雖然方案是low了一點(diǎn),但總算及時(shí)解決了線上問題,用戶可以正常使用,也留出了足夠的時(shí)間讓我排查遇到的這個(gè)鬼畜一般的問題。那么就說(shuō)下這個(gè)臨時(shí)的解決方案,我們可以先用駝峰的實(shí)體去查詢出所有的數(shù)據(jù),然后再將駝峰中的屬性值一個(gè)個(gè)賦值到下劃線的屬性實(shí)體中,這樣就能取到對(duì)象中的值,返回給我的第三方調(diào)用,話說(shuō)我的第三方也是夠惡心的,給我的接口中的傳參都是下劃線分割,著實(shí)夠惡心的嗎,不知道我一直是一個(gè)規(guī)規(guī)矩矩的java小白嗎,也是夠了。哈哈。
方案二:相對(duì)來(lái)說(shuō)就高大上了,這里的主要問題其實(shí)就是屏蔽全局的駝峰設(shè)置對(duì)于我們個(gè)別特殊的mapper實(shí)體映射的問題,這些下劃線屬性的命名的實(shí)體不能直接接收數(shù)據(jù)庫(kù)的字段,相必我們都知道m(xù)ybatis有倆種方式接收查詢結(jié)果的數(shù)據(jù),resultType和resultMap,解決這個(gè)問題,我們可以使用resultMap的方式接收數(shù)據(jù),這樣就可以屏蔽掉駝峰的影響,接收的數(shù)據(jù)會(huì)按照resultMap中的映射去接收數(shù)據(jù),無(wú)論你是下劃線字段還是駝峰字段還是其它亂七八糟的命名方式,其都可以映射,是不是很強(qiáng)大呢。哈哈,也怪小編自己比較懶,手動(dòng)配置這些映射覺得特別麻煩,總是使用別名加resultType的方式接收數(shù)據(jù),幾乎不用resultMap,今天才體會(huì)到了其異乎強(qiáng)大的功能,存在即是合理的,真的是這個(gè)樣子。感嘆這些設(shè)計(jì)的精妙之處之時(shí),也被這些作者的才華深深的折服了。
結(jié)語(yǔ)
好了,今天就碼到這里了,雖然是比較水的一篇文章,但是也是希望那些初學(xué)者不要再犯和我一樣的錯(cuò)誤,別被身邊的同事調(diào)侃,一個(gè)bug解一天,真的很扎心啊。