亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mybatis中isNotNull與isNotEmpty的使用心得

 更新時間:2022年03月10日 10:04:03   作者:春秋戰(zhàn)國程序猿  
這篇文章主要介紹了Mybatis中isNotNull與isNotEmpty的使用心得,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

isNotNull與isNotEmpty使用心得

做開發(fā)工作時間長了,會發(fā)現(xiàn),在需求逐步梳理清晰以后,大致的方向已經(jīng)明確了。此時會進入細節(jié)開發(fā)環(huán)節(jié),是最繁瑣,也是決定開發(fā)質(zhì)量的關鍵階段。最近遇到了一個生產(chǎn)問題,必填字段的值,清空保存,無法保存成功。

具體業(yè)務需求是這樣的

客戶的基本信息,坐席可以保存,也可以提交后端系統(tǒng)進行審批。

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

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

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

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

主要是不是阻斷性問題,影響不大,所以可能有的坐席發(fā)現(xiàn)了,也沒有在意,沒有報生產(chǎn)問題。

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

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

  • isNotNull,顧名思義,就是不為null,也就是<>null
  • isNotEmpty,顧名思義就是不為空,也就是<>null,并且<>''(空字符串)

區(qū)別也很明顯,就是是否包含空字符串。針對上面的業(yè)務場景,我們需要保存空字符串,該什么哪個呢

看一下下面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#

當頁面?zhèn)鬟f過來的值為空字符串時,我們要保證能執(zhí)行對PRODUCT_NAME的修改,很顯然,需要使用isNotNull標簽。

出問題的原因其實也簡單,就是復制粘貼的代碼,也沒有注意到isNotNull與isNotEmpty的區(qū)別。

所以平時我們還是要細心,關鍵心中要有分寸,如果你很清楚的知道isNotNull與isNotEmpty的區(qū)別,一旦看到這個,你自然就會想到該如何使用。

isNull, isNotNull與isEmpty, isNotEmpty區(qū)別

關于這個看了很多例子都很模糊

  • 在iBATIS中isNull用于判斷參數(shù)是否為Null,isNotNull相反
  • isEmpty判斷參數(shù)是否為Null或者空,滿足其中一個條件則其true
  • isNotEmpty相反,當參數(shù)既不為Null也不為空是其為true

例子

? <update id="updateYbAndSb" parameterClass="java.util.HashMap">
? ? UPDATE MZSF_CLININVOINFO T
? ? <dynamic prepend="SET">
? ? ? <isNotNull property="YBZHCODE">
? ? ? ?<isEmpty property="YBZHCODE" prepend=","> T.YBZHCODE = NULL</isEmpty>
? ? ? ?<isNotEmpty property="YBZHCODE" prepend=","> T.YBZHCODE = #YBZHCODE#</isNotEmpty>
? ? ? </isNotNull>
? ? ? <isNotNull property="HOSPID">
? ? ? ?<isEmpty property="HOSPID" prepend=","> T.HOSPID = NULL</isEmpty>
? ? ? ?<isNotEmpty property="HOSPID" prepend=","> T.HOSPID = #HOSPID#</isNotEmpty>
? ? ? </isNotNull>
? ? ? <isNotNull property="SBZFJE">
? ? ? ?<isEmpty property="SBZFJE" prepend=","> T.SBZFJE = NULL</isEmpty>
? ? ? ?<isNotEmpty property="SBZFJE" prepend=","> T.SBZFJE = #SBZFJE#</isNotEmpty>
? ? ? </isNotNull>
? ? ? <isNotNull property="SBZFXJJE">
? ? ? ?<isEmpty property="SBZFXJJE" prepend=","> T.SBZFXJJE = NULL</isEmpty>
? ? ? ?<isNotEmpty property="SBZFXJJE" prepend=","> T.SBZFXJJE = #SBZFXJJE#</isNotEmpty>
? ? ? </isNotNull>
? ? </dynamic> ? ? ?
? ?WHERE T.SFID = #SFID#
? ? ?AND T.FORGID = #FORGID# ? ?
? ?</update>

上面sql語句,如果 YBZHCODE傳入的是null 即:

hashMap.put("YBZHCODE",null); ? ?

則sql語句中不會更新這個字段

如果YBZHCODE傳入的是空 即:

hashMap.put("YBZHCODE",“”); ? ?

則sql語句 會將這個字段更新成null,為空

如果有值,則更新成傳入的值

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Redis中String字符串和sdshdr結(jié)構體超詳細講解

    Redis中String字符串和sdshdr結(jié)構體超詳細講解

    這篇文章主要介紹了Redis中String字符串和sdshdr結(jié)構體,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-04-04
  • Java中操作超大數(shù)的方法

    Java中操作超大數(shù)的方法

    本篇文章是小編在網(wǎng)上整理的關于java操作超大數(shù)的方法以及解決思路,有興趣的朋友參考學習下。
    2018-06-06
  • 詳解 Java繼承關系下的構造方法調(diào)用

    詳解 Java繼承關系下的構造方法調(diào)用

    這篇文章主要介紹了詳解 Java繼承關系下的構造方法調(diào)用的相關資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • idea中Maven鏡像源詳細配置步驟記錄(對所有項目)

    idea中Maven鏡像源詳細配置步驟記錄(對所有項目)

    Maven是一個能使我們的java程序開發(fā)節(jié)省時間和精力,是開發(fā)變得相對簡單,還能使開發(fā)規(guī)范化的工具,下面這篇文章主要給大家介紹了關于idea中Maven鏡像源詳細配置(對所有項目)的相關資料,需要的朋友可以參考下
    2023-05-05
  • SpringBoot入門編寫第一個程序Helloworld

    SpringBoot入門編寫第一個程序Helloworld

    這篇文章是Springboot入門篇,來教大家編寫第一個Springboot程序Helloworld,文中附有詳細的示例代碼,有需要的同學可以借鑒參考下
    2021-09-09
  • SpringBoot中使用 RabbitMQ的教程詳解

    SpringBoot中使用 RabbitMQ的教程詳解

    這篇文章主要介紹了SpringBoot中使用 RabbitMQ的教程詳解,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • jmeter設置全局變量與正則表達式提取器過程圖解

    jmeter設置全局變量與正則表達式提取器過程圖解

    這篇文章主要介紹了jmeter設置全局變量與正則表達式提取器過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • java實現(xiàn)水仙花數(shù)的計算

    java實現(xiàn)水仙花數(shù)的計算

    這篇文章主要為大家詳細介紹了java實現(xiàn)水仙花數(shù)的計算,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Java并發(fā)Map面試線程安全數(shù)據(jù)結(jié)構全面分析

    Java并發(fā)Map面試線程安全數(shù)據(jù)結(jié)構全面分析

    本文將探討如何在Java中有效地應對這些挑戰(zhàn),介紹一種強大的工具并發(fā)Map,它能夠幫助您管理多線程環(huán)境下的共享數(shù)據(jù),確保數(shù)據(jù)的一致性和高性能,深入了解Java中的并發(fā)Map實現(xiàn),包括ConcurrentHashMap和ConcurrentSkipListMap,及相關知識點
    2023-09-09
  • Mybatis中注入執(zhí)行sql查詢、更新、新增及建表語句案例代碼

    Mybatis中注入執(zhí)行sql查詢、更新、新增及建表語句案例代碼

    這篇文章主要介紹了Mybatis中注入執(zhí)行sql查詢、更新、新增以及建表語句,主要說明一個另類的操作,注入sql,并使用mybatis執(zhí)行,結(jié)合案例代碼詳解講解,需要的朋友可以參考下
    2023-02-02

最新評論