文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Mybatis中isNotNull与isNotEmpty的使用心得

2024-04-02 19:55

关注

isNotNull与isNotEmpty使用心得

做开发工作时间长了,会发现,在需求逐步梳理清晰以后,大致的方向已经明确了。此时会进入细节开发环节,是最繁琐,也是决定开发质量的关键阶段。最近遇到了一个生产问题,必填字段的值,清空保存,无法保存成功。

具体业务需求是这样的

客户的基本信息,坐席可以保存,也可以提交后端系统进行审批。

1,保存的时候,其实就是一个暂存的功能,只要坐席输入的是合法的值,都要保存入库。

2,提交审批的时候会进行各种校验,包括合法性校验、必填校验,业务逻辑校验等等。

生产问题就出在这个保存的功能上,如果一个字段有值,但是坐席清空,点保存,这时候保存没有生效。

问题其实也很好定位,我去看了一下代码就找到问题了。但是这个问题在生产上一直存在的。

主要是不是阻断性问题,影响不大,所以可能有的坐席发现了,也没有在意,没有报生产问题。

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

以上是从业务的角度来分析的,接下来,我们从技术角度来看一下这个问题。

区别也很明显,就是是否包含空字符串。针对上面的业务场景,我们需要保存空字符串,该什么哪个呢

看一下下面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的区别,一旦看到这个,你自然就会想到该如何使用。

isNull, isNotNull与isEmpty, isNotEmpty区别

关于这个看了很多例子都很模糊

例子

  <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,为空

如果有值,则更新成传入的值

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯