1. 程式人生 > >mybatis資料庫欄位增加

mybatis資料庫欄位增加

http://zhanghteye.iteye.com/blog/2372572


今天處理一個生產環境報NullPointerException的問題,根據查詢的物件,獲得物件中的一個欄位,結果為空。

 

報錯位置:int partnerCode = servicefeeRecord.getPartnerCode().intValue();

(注:本身這直接取欄位不判斷是否為空,就獲得它的int值。寫法本身就有點問題,雖然業務上這個欄位一定存在。)

 

定位問題步驟:

1、檢視生產資料庫,物件對應的資料改欄位是有值的。

為啥沒查出來?繼續找問題。

 

2、從源頭定位起,從查詢物件的service方法,找到dao方法,再找到mapper檔案裡面的查詢sql。

sql查詢欄位中並沒有包括需要的欄位。

原來問題在此,那怎麼會有這個坑呢?

 

3、根據最近了解的其他人做相關需求的變動,原來在於有同事做需求拓展時,只在資料庫表增加該欄位、在實體bean增加該欄位,mapper檔案中的sql查詢,沒有增加改欄位導致。

 

總結:

1、原本很簡單的問題,卻花費大半個小時來處理問題,以及幫別人填坑,實屬無奈。

2、開發人員工作的嚴謹性,相當重要,如果考慮不全,不單單影響到自己,甚至影響到其他人。

3、基於Mybatis的應用:資料庫表增加一個欄位,還要改哪些地方?

     a、寫sql指令碼修改表結構

     b、實體bean增加物件

     c、mapper中所有涉及查詢整個物件欄位的sql,都需一一新增對應的新增欄位

     d、mapper配置中涉及整個物件的查詢儘量採用以下方式:

       

        <sql id="queryColumns">

            Column1,Column2,Column3,....

        </sql>

 

        <select id="查詢方法名稱" resultMap="返回結果物件">

            SELECT

                <include refid="queryColumns" />

            FROM 

                 ...

        </select>

        這樣很多類似查詢,都是引用queryColumns,到時只需改一個地方即可。