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