问题情景:
数据库表设计如下:
上如中有一个字段为propertyIds,表示的是所有小区列表的集合,我需要根据我所得到的小区号A在propertyIds中查询该字段是否包含我所得到的小区号。propertyIds中的数据格式为(111111,222222),每个小区号是使用‘ , ’分割的。包含一种特殊的情况:当propertyIds为空时表示包含最高权限,可以向所有小区发送消息。
一开始我的QueryWapper(使用的是MyBatisPlus)设计如下:
propertyIds = thirdAuthorizedMapper.selectList(new QueryWrapper<ThirdAuthorized>().like("propertyIds", message1.getPropertyId()).or().isNull("propertyIds"));
问题出现:
经过测试我的信息传到Mqtt时只发送给了appKey为123465的小区,其他的小区并没用接收到相应的消息,经过断点测试,发现集合的size为1,由此可以看出,在Mysql中Null和空字符串是不一样了。
修改QueryWapper的代码,增加判断字段为空字符串的逻辑,成功修改Bug。
代码如下:
propertyIds = thirdAuthorizedMapper.selectList(new QueryWrapper<ThirdAuthorized>().like("propertyIds", message1.getPropertyId()).or().isNull("propertyIds").or().eq("propertyIds",""));
总结
在查询语句判断时添加对应字段为空字符串的逻辑即可。