记录使用mybatis时踩到的坑-integer类型数据为0时,会判断为:等于空字符串为true
因为做查询操作时,需要设置为传入参数值才进行查询,于是判断条件是:
status != null and status != ''
即mapper层的写法:
<if test="status != null and status != ''">and status=#{status}</if>
但设计表时,默认status=0表示正常状态,status=1表示其他状态。当传入status=0进行查询时,发现筛选条件失效,即会将status=0和status=1的都查询出来。
经过排查发现,当status=0时,mybatis会认为status!=''为false(即当status=0时,status==''为true),所以无法进入status的条件判断。
解决办法:
设计表时,尽量避免status=0的默认值设置;
或者去掉status!=''的判断,但这样也会造成当status不传值时,将所有状态下的记录查出来。