Mybatis 在 DB 無資料時,是 null 還是 empty?

Jeff Hsieh
1 min readAug 4, 2019

這次踩到了一個 index out bound 的小坑,順手記錄一下

起因是在 API 發生了 index out bound 的 exception,檢查後發現原因出在 mybatis 上

原本在 service 中對於 mapper 的呼叫是有加上 null 檢查的,以避免如果 query 的資料不存在的話後續不會出錯

但是 mybatis 在撈不到資料時,mapper 其實會有兩種 return 結果,如果今天 mapper 只會回傳一個物件(DTO),那在撈不到資料時會 return null,但若今天 mapper 回傳的是一組符合 query 條件的 list (List<DTO>),這時候若撈不到資料,mapper 不會 return null,而是會 return 一個空的 list,所以 null check 才抓不到錯誤,造成後面的 index out bound

好一陣子沒有更新了,最近做了些 side project,用 linebot 串接加密貨幣交易所 API,有空再來寫一下~

--

--

Jeff Hsieh

資深後端工程師,熟悉JAVA與現代網頁後端技術與框架,並具備金融市場交易知識