记录使用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不传值时,将所有状态下的记录查出来。

posted @ 2023-03-31 17:24  DoubleFishes  阅读(420)  评论(1编辑  收藏  举报