前提:一般执行update语法和insert语法时,都会用到if test的标签,动态条件来执行。
然后刚开始的时候发现,double类型字段if test标签也是写成了 <if test="xxx != null and xxx !=' ' "> 这个时候发现,当更新语法时,这个字段没有传入值时,被默认的改成0。
然后去搜索资料,说写成这种形式即可,<if test="xxx != null and xxx !=' ' or xxx != 0 "> 这样确实可以保证,当不传入xxx这个值时,不会去改动,不会变成0。
但是后来问题来了,当需要这个字段更新成0时,用这种就执行不了,查了好多资料,基本都不行。后来发现,在实体类中将这double 和 int 类型字段改成包装类即可。
包装类即将这些字段改成Object类型,因为8大数据类型不具备面向对象的功能,同String一样判断 把double改成DOUBLE,把int改成Integer即可,然后
<if test="xxx != null "> 只需判断不等于null就可以完美解决。最后附上8大基本数据类型对应的包装类
基本数据类型 | 对应的包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
boolean | Boolean |