Mybatis中isNotNull與isNotEmpty的使用技巧

做開發工作時間長了,會發現,在需求逐步梳理清晰以後,大致的方向已經明確了。此時會進入細節開發環節,是最繁瑣,也是決定開發質量的關鍵階段。最近遇到了一個生產問題,必填字段的值,清空保存,無法保存成功。

 

具體業務需求是這樣的:

客戶的基本信息,坐席可以保存,也可以提交後端系統進行審批。

1,保存的時候,其實就是一個暫存的功能,只要坐席輸入的是合法的值,都要保存入庫。

2,提交審批的時候會進行各種校驗,包括合法性校驗、必填校驗,業務邏輯校驗等等。

 

生產問題就出在這個保存的功能上,如果一個字段有值,但是坐席清空,點保存,這時候保存沒有生效。

問題其實也很好定位,我去看了一下代碼就找到問題了。但是這個問題在生產上一直存在的。

主要是不是阻斷性問題,影響不大,所以可能有的坐席發現了,也沒有在意,沒有報生產問題。

原因就是:本該使用isNotNull的地方,缺使用了isNotEmpty

 

以上是從業務的角度來分析的,接下來,我們從技術角度來看一下這個問題。

isNotNull,顧名思義,就是不爲null,也就是<>null

isNotEmpty,顧名思義就是不爲空,也就是<>null,並且<>''(空字符串)

區別也很明顯,就是是否包含空字符串。針對上面的業務場景,我們需要保存空字符串,該什麼哪個呢,看一下下面2個SQL語句:

 

UPDATE
    PRODUCT P
SET
    UPDATE_TIME = SYSDATE
    <isNotEmpty prepend="AND" property="productName">
        P.PRODUCT_NAME = #productName#
    </isNotEmpty>
WHERE
    P.PRODUCT_ID = #productId#

 

UPDATE
    PRODUCT P
SET
    UPDATE_TIME = SYSDATE
    <isNotNull prepend="AND" property="productName">
        P.PRODUCT_NAME = #productName#
    </isNotNull>
WHERE
    P.PRODUCT_ID = #productId#

 

當頁面傳遞過來的值爲空字符串時,我們要保證能執行對PRODUCT_NAME的修改,很顯然,需要使用isNotNull標籤。

出問題的原因其實也簡單,就是複製粘貼的代碼,也沒有注意到isNotNull與isNotEmpty的區別。所以平時我們還是要細心,關鍵心中要有分寸,如果你很清楚的知道isNotNull與isNotEmpty的區別,一旦看到這個,你自然就會想到該如何使用。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章