Mybatis判断空字符串的问题
目录
- Mybatis判断空字符串
- 先说正确的使用方式
- 还有一个题外话
- Mybatis判断为空注意
- startBalancejava中是BigDecimal类型
Mybatis判断空字符串
先说结论:如果使用正确,是不会产生任何问题的。大家各种疑惑,全是使用不当产生的。
先说正确的使用方式
一般判空的方式就是:
非String类型使用obj != null即可
String类型通常要加一个空串的判断obj != null and obj != '',如果入参类型对应的判断方式使用正确,不会有问题。
但是有很多做事不认真的人,会把这两个用反,虽然没报错,但是逻辑却不是预想中的,错误的使用例子就是,入参是一个数字类型,如Long,但是在判空时使用obj != null and obj != '',这种做法本身就是错误的,你会发现,当Long值传0的时候,obj != ''是成立的,就导致了完全出乎预料的结果。其中mybatis的处理方式是,当发现你用一个数字类型的对象和串比较的时候,他会将串转换成数字类型,非空串的时候是没有问题的,空串的时候,mybatis将空串转换成数字0,这就是mybatis做的实现,没有什么漏洞,问题根源是对非字符串类型做了空串判断的错误操作。最后的结论就是,数字类型的对象不要使用空串判断表达式obj != ''。
还有一个题外话
两个系统交互时,数据在网络传输时是不具备类型的,只是到了端时,才会进行类型识别,我们通常和前端交互,数据在传输过程中都是串,也就是没有null这种,所以后端接收时规定的类型就非常重要了,需要注意的情况就是后端定义String类型时,不会出现null(除非前端没有传递这个参数),只会是空字符串,所以在判断时需要注意。
Mybatis判断为空注意

startBalance java中是BigDecimal类型
这样写,startBalance != ‘’ 会返回false ,所以对象不能判断 != ‘’ ;
普通的String是可以的…
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
mybatis 解决将数值0识别成空字符串的问题
今天遇到一个问题 我在用java的BigDecimal对象时,值是0.00000:该对象不是空的,是new出来的,我需要将该值插入数据库,数据库对于该值的接收字段类型是decimal. 我使用的Mybatis.mybatis中的语句大致如下: UPDATE user_consumption <trim prefix="SET" suffixOverrides=","> <if test="totalConsumption!=null&qu
-
解决mybatis plus字段为null或空字符串无法保存到数据库的问题
背景 项目中集成了mybatis plus, 今天在做后台的一个常规的增删改查时,发现字段值为null时,这个字段不会被保存到数据库 解决办法 在字段上加上 @TableField(strategy = FieldStrategy.IGNORED) strategy字段更新插入策略属性说明: IGNORED(0): "忽略判断", 所有字段都更新和插入 NOT_NULL(1): "非 NULL 判断", 只更新和插入非NULL值 NOT_EMPTY(2): &quo
-
mybatis 映射文件中if标签判断字符串相等的两种方式
mybatis 映射文件中,if标签判断字符串相等,两种方式: 因为mybatis映射文件,是使用的ognl表达式,所以在判断字符串sex变量是否是字符串Y的时候, <if test="sex=='Y'.toString()"> <if test = 'sex== "Y"'> 注意: 不能使用 <if test="sex=='Y'"> and 1=1 </if> 因为mybatis会把'Y'解析为字
-
Mybatis3 if判断字符串变态写法
mybatis我们常用的判空操作,出现了常见问题: 错误写法:if test="status == 'Y'" 结果:抛异常NumberFormatException异常!提示内容非常少,看不出问题在哪里! 正确写法:if test='status == "y"' 还可以这样写:if test="status == 'y'.toString()" 或者可以这样写 if test ='status=="Y"' 补充:Mybatis
-
Mybatis判断空字符串的问题
目录 Mybatis判断空字符串 先说正确的使用方式 还有一个题外话 Mybatis判断为空注意 startBalancejava中是BigDecimal类型 Mybatis判断空字符串 先说结论:如果使用正确,是不会产生任何问题的.大家各种疑惑,全是使用不当产生的. 先说正确的使用方式 一般判空的方式就是: 非String类型使用obj != null即可 String类型通常要加一个空串的判断obj != null and obj != '',如果入参类型对应的判断方式使用正确,不会有问题.
-
asp.ent(C#)中判断空字符串的3种方法以及性能分析
3种方法分别是: string a=""; 1.if(a=="") 2.if(a==String.Empty) 3.if(a.Length==0) 3种方法都是等效的,那么究竟那一种方法性能最高呢?本人用实验说明问题. 建立3个aspx页面(为什么用网页,主要是利用Microsoft Application Center Test ) WebForm1.aspx 复制代码 代码如下: private void Page_Load(object sender, Sys
-
js判断空对象的实例(超简单)
最近项目遇到判断空对象的一个问题,查阅相关资料再进行总结一下. 判断空对象不比判断空字符串之类的,因为空对象也是一个对象,需要单独分配内存,而不是像字符串那样为空时就是大锅饭,大家都相等,如下代码: 如上代码可以发现,无论是通过对象字面量方式创建的空对象还是通过Object构造函数创建的空对象,彼此之间都是不相等的. 1.将对象转换为字符串进行比较 这种方法很不推荐,但也确实是最容易想到的,主要使用JSON.stringify()这个方法对对象进行强转,贴出来仅供一看: var a={}; va
-
JS判断空对象的几个方法大盘点
目录 知识准备 Object.keys Object.getOwnPropertyNames 可枚举属性 hasOwnProperty 盘点判空方法 JSON.stringify判空 for in判空 Object.getOwnPropertyNames判空 Object.keys()判空 hasOwnProperty判空 附将对象转换为字符串进行比较 总结 知识准备 在盘点JS判空方法之前我们先来了解下面的三个方法. Object.keys Object.keys()方法是以对象为参数,返回一
-
Mybatis 如何传入字符串参数,分割并遍历
目录 如何传入字符串参数,分割并遍历 如前台传入字符串参数 正确写为如下 Mybatis 传入分割字符串做参数 解决 如何传入字符串参数,分割并遍历 如前台传入字符串参数 String str = "a,b,c,d,e,f": 现需将此参数作为查询语句的参数, Select * from news where id in (${id}) 使用该语句查询正常返回结果,但势必产生sql注入漏洞. 如修改为: Select * from news where id in (#{id}) 程序
-
mybatis if传入字符串数字踩坑记录及解决
目录 mybatis if传入字符串数字踩坑 正确的写法如下 mybatis if比较字符串相等问题 总结 mybatis if传入字符串数字踩坑 前台页面内容,注意这里的类型为字符串类型的数字 <li> <label>支付类型:</label> <form:select path="payType" class="input-medium"> <form:option value
-
js 判断计算字符串长度/判断空的简单方法
计算字符串长度可用的三种方法: 复制代码 代码如下: echo "$str"awk '{print length($0)}' expr length "$str" echo "$str"wc -c 但是第三种得出的值会多1,可能是把结束符也计算在内了.判断字符串为空的方法有三种: 复制代码 代码如下: if [ "$str" = "" ] if [ x"$str" = x ] if [
-
Mybatis映射文件实例详解
一.输入映射 parameterType 指定输入参数的Java类型,可以使用别名或者类的全限定名.它可以接收简单类型.POJO.HashMap. 1.传递简单类型 根据用户ID查询用户信息: <select id="findUserById" parameterType="int" resultType="com.itheima.mybatis.po.User"> SELECT * FROM USER WHERE id =#{id
-
mybatis中的test语句失效处理方式
目录 mybatistest语句失效 解决方案也很简单 mybatistest判断注意事项 误将一个传入的整型数据使用了下面的判断方式 同样整数数据也会转换为double类型 mybatis test语句失效 正常情况下,写动态sql的if test或when test语句时,条件引用为双引号括单引号 如下: <select id="sel1" resultType="User"> select * from tb_user
随机推荐
- 浅谈Linux grep与正则表达式
- 利用Node.JS实现邮件发送功能
- JS中关于事件处理函数名后面是否带括号的问题
- 进出口英语全套书信集合
- javascript正则表达式容易被忽略的小问题整理
- CMD记录器改良版代码
- 用ASP读取XML文件的具体方法与示例
- 使用Node.js给图片加水印的方法
- Nodejs极简入门教程(二):定时器
- php使用pdo连接并查询sql数据库的方法
- C#流类FileStream学习使用笔记
- Chkntfs 显示或指定在启动计算机时计划的自动系统检查是否在 FAT、FAT32 或者 NTFS 卷上运行。
- Eclipse Debug模式的开启与关闭问题简析
- dul无法加载bootstrap实现unload table/user恢复
- jQuery中last()方法用法实例
- jquery加载图片时以淡入方式显示的方法
- innerHTML 和 getElementsByName 在IE下面的bug 的解决
- 深入理解Spring MVC的数据转换
- C#日期转换函数分享
- 详解webpack+express多页站点开发
