天天看點

解決了一個小問題——讀源碼真的隻是為了應付面試?問題現場問題分析問題解決三之感想

大家好,我是解決一個bug,産生三個bug的程式員,是以大家都叫我三bug。

前一陣子我又解決了一個bug,看看是什麼情況吧!

問題現場

我正在愉快地寫bug,寫完之後測bug,結果發現了一個bug:

java.sql.SQLException: xxxx : Column 'status' not found in any table       

我們的ORM架構使用的是MybatisPlus,這個問題是在我使用這個apid時産生的:

this.baseMapper.selectBatchIds(ids);      

問題分析

這個bug也很清晰,有一個字段

status

沒有找到。

因為用的是MP封裝的方法,沒有自己寫xml,是以是實體類的字段和資料庫字段對應不上。

但奇怪的在哪,因為我很确定,我的實體類中沒有

sttus

這個字段。

外事不決問百度,内事不決問同僚。

我問了一下同僚,有沒有遇到過這個問題?

—— 遇到過了。

怎麼解決的?

—— 資料庫添加

status

字段。

問題到這就結束了嗎?當然沒有。我們的資料庫設計都是定好規範的,憑白往裡面添加一個字段,這種解決方式是我不能接受的。

問題的突破口在哪?

要搞清楚

sttus

到底是定義在哪的。我在Idea裡全局搜尋了一下,沒有搜尋到。

但是仔細檢視了一下實體類,

extends EcEntity      

嗯,他還有一個父類。

點進去看一下,這個類有五個字段:

createUser

createTime

updateUser

updateTime

delFlag

還是沒有

status

,别急,這個類還有個父類。

extends BaseEntity      

點進去一看:

public abstract class BaseEntity implements Serializable {
    @ApiModelProperty("業務狀态")
    private Integer status;
    ……
}          

破案了,原來

status

是在這兒。為什麼搜不到,原來是封在了jar包裡。

解決了一個小問題——讀源碼真的隻是為了應付面試?問題現場問題分析問題解決三之感想

問題解決

status

找到了,咱也動不了。

問問架構組同學這個字段是幹什麼的。

—— 有些業務資料庫設計裡用上了這個字段,是以抽取出來。

好吧,可是,我們用不上啊。

難道非得資料庫裡加上這麼一個用不上的字段?

解決了一個小問題——讀源碼真的隻是為了應付面試?問題現場問題分析問題解決三之感想

當然不用,我之前看過MP的官方文檔,裡面有個注解的屬性我稍微還有點印象。

什麼屬性呢?

查一下官方文檔,就是它——

@TableField(exist = false)

這個屬性是用來幹什麼的呢?是用來辨別實體類中的非表字段的。

在我的實體類中添加:

@TableField(exist = false)
    private Integer status;      

OK,問題解決。

解決問題的我紅光滿面,站起來,腆着肚子:

“各位老哥,過來一下。”

召集了小組的同僚,把這個問題給他們一講,豪橫地說道:

“把資料庫裡加的字段都給我删了,都按我的來。”

同僚一臉欽佩,“這個問題你是怎麼想到的?”

我歪嘴一笑——“實力!”

解決了一個小問題——讀源碼真的隻是為了應付面試?問題現場問題分析問題解決三之感想

三之感想

好了,這個簡單的小問題就處理完了。

問題很簡單,也有其它不太優雅的處理方式。

但是我們小組裡其它同僚都沒有找到問題的原因和合适的處理方式,而我找到了呢?

  • 我稍微閱讀過一點jdk的源碼,是以不怵扒源碼
  • 我知道MP是我們新項目主要用的ORM架構,把官方文檔過了一遍

這兩個條件缺一個,我可能就沒法以上面說的方式解決這個問題,而是以百度到的,資料裡添加字段來解決。

這隻是很小的一個問題,但是放大來看,有時候我們做重複性工作的時候想一想:

你抱怨每天都在crud,是不是你隻有crud的能力呢?
解決了一個小問題——讀源碼真的隻是為了應付面試?問題現場問題分析問題解決三之感想

當然不是在座的各位,是說我自己。

就像上面的問題,是架構組的同僚封裝MybatisPlus留的一個坑。我也不敢吐槽,因為我沒那個實力。

假如他們做的這個需求給我:

優化和封裝開源架構MybatisPlus

我也幹不了,因為不了解MP的相關原理,沒有扒過源碼,百度也查不到什麼資料。

平時,

學習原理

閱讀源碼

常常發生在什麼時候?

——準備面試的時候。

我們雖然常常吐槽

面試造火箭,入職擰螺絲

,但是,這些造火箭的東西可不止在面試時候有用——

  • 遇到問題救命:日常開發很簡單,遇到問題,沒有知識儲備很可能下不了手。
  • 有機會能頂上:萬一有一些有技術含量的工作分派,想做,但是做不了,隻能看着分給别人,不得難受死。

是以,保持學習,注意積累!

簡單的事情重複做,重複的事情認真做,認真的事情創造性地做。

點贊

關注

不迷路!咱們下期見!