我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mybatis中isNotNull与isNotEmpty的使用心得

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mybatis中isNotNull与isNotEmpty的使用心得

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

isNull, isNotNull与isEmpty, isNotEmpty区别

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

  • 在iBATIS中isNull用于判断参数是否为Null,isNotNull相反
  • isEmpty判断参数是否为Null或者空,满足其中一个条件则其true
  • isNotEmpty相反,当参数既不为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,为空

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

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

免责声明:

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

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

Mybatis中isNotNull与isNotEmpty的使用心得

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mybatis使用oracle进行添加数据的心得

oracle mybatis   本次博主主要进行oralce数据库开发,好久不用oracle,有很多知识点也忘的差不多了,本次主要是复习一下工作中主要使用的一些sql语句编写;查询      查询语句都是正常的,但是需要注意的是oracle数据库在查询
mybatis使用oracle进行添加数据的心得
2017-08-08

分享Android中pullToRefresh的使用心得

pullToRefresh的导入首先,点击new按钮 -> import Module 然后在 New Module界面选择已经在本地的含有源代码的pullToRefresh。打开如下图所示的open Module Settings 按钮
2022-06-06

Spring中Transactional注解使用的心得(推荐)

这篇文章主要介绍了Spring中Transactional注解使用的心得,事务是用来控制数据的ACID特性的,用于保证数据的正确性和完整性,需要的朋友可以参考下
2022-11-13

PHPCMS 使用心得与技巧,以及小BUG的纠正

用phpcms开发的第一个项目是一个素材类网站 www.penshow.cn,之所以选PHPCMS估计是因为看了她的百万级的数据测试报告。而之后,我越用感觉也越不错。当然,期间遇到过不少问题,总结了一下,方便以后开发。(版本:phpcms2
2022-06-12

关于react-router中的Prompt组件使用心得

这篇文章主要介绍了关于react-router中的Prompt组件学习心得,Prompt组件作用是,在用户准备离开该页面时,弹出提示,返回true或者false,如果为true,则离开页面,如果为false,则停留在该页面,本文结合示例代码介绍的非常详细,需要的朋友可以参考下
2023-01-17

Win7系统中库功能的使用技巧让你使用更加得心应手

Windows7操作系统中的库功能是一大亮点,它是一种文件管理模式,彻底改变了文件的管理方式,变得更加灵活和方便,不管库中的文件有多少,都可以从js库中直观清楚的看到各个文件,让凌乱的文件变得整齐,查找文件更便捷,但是想必有很多人对库功能的
2023-06-05

php中值得收藏的PDO对象安装配置与使用

注意:这一步在 PHP 5.3及更高版本中不是必须的,对于 PDO 不再需要做为一个 DLL 文件。
2016-03-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录