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 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'解析为字
-
mybatis 解决将数值0识别成空字符串的问题
今天遇到一个问题 我在用java的BigDecimal对象时,值是0.00000:该对象不是空的,是new出来的,我需要将该值插入数据库,数据库对于该值的接收字段类型是decimal. 我使用的Mybatis.mybatis中的语句大致如下: UPDATE user_consumption <trim prefix="SET" suffixOverrides=","> <if test="totalConsumption!=null&qu
-
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
随机推荐
- VS2015连接Oracle数据库的详细步骤
- PHP中文汉字验证码
- JS中 用户登录系统的解决办法
- .net采用ajax实现邮箱注册和地区选择实例
- 获取App.config配置文件中的参数值
- php session 预定义数组
- python实现简单点对点(p2p)聊天
- JavaScript中this的使用详解
- 完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
- jQuery EasyUI API 中文文档 - Spinner微调器使用
- NodeJS学习笔记之(Url,QueryString,Path)模块
- PHP针对伪静态的注入总结【附asp与Python相关代码】
- 用Windows Storage Server 2008做iSCSI存储服务器的图文方法第1/2页
- C语言中qsort函数用法实例小结
- ASPNETPAGER分页控件的使用方法[图文]
- 详解Docker容器跨主机通信的方法
- vue中实现在外部调用methods的方法(推荐)
- python爬虫面试宝典(常见问题)
- 在Python中使用Neo4j的方法
- .net core webapi jwt 更为清爽的认证详解