MyBatis解析<if>动态sql时,Integer类型值为0,返回false

Posted 默辨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis解析<if>动态sql时,Integer类型值为0,返回false相关的知识,希望对你有一定的参考价值。

踩坑日记,内容如题



如题,MyBatis中如果参数类型为Integer,并且参数的值为0,那么动态SQL在判断下面条件的时候,返回为false

<if test="money != null and money != ''">



解决办法,去掉判断字符串为 ‘’ 的情况即可

<if test="money != null">



补充

MyBatis源码的位置,肯定是解析动态SQL的位置,所以我们可以直接定位到IfSqlNode类中



然后就是Ognl表达式的解析流程了(本人调试了一会,没调试出来,后期有时间再调试补充完全)

以上是关于MyBatis解析<if>动态sql时,Integer类型值为0,返回false的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis超强大的动态SQL大全

Mybatis -- 动态Sql概述动态Sql之<if>(包含<where>)动态Sql之<foreach>sql片段抽取

精通Mybatis之动态sql全流程解析

精通Mybatis之动态sql全流程解析

Mybatis动态SQL单一基础类型参数用if标签

Mybatis源码解析MyBatis解析Mapper.xml(以动态sql为例)