记一次mybatis中sql动态查询遇到的坑
1.今天遇到了一个导出excle数据不一致的问题,在我本地测试导出excle数据为4497条 然后部署到阿里云服务器上去之后导出数据才4493条,令我非常不解,因为是同一个jar包 同一个数据库 但却产生两种不同的结果,结果两张excle表格进行对比发现确实是少了四条数据 这四条数据有一个共同点 前面四列都是空数据 即姓名 性别 地址 微信名四个全部为空 经过在数据库里查询发现是如下这样数据:
2.然后我立马打印本地运行的jar包和阿里云服务器上控制台的log日志发现数据少了四条 log日志打印如下(图一本地 图二阿里云服务器):
3.然后上面根本就没发现问题出在哪里 也许是因为一个很小的细节问题 没注意到 想到同样的jar包 同一个数据库环境,怎么会出现不同的结果 然后我仔细发现了sql打印日志上的确是有问题的 而却问题相当明显 sql日志如下(图一本地 图二阿里云)
4.看到问题很明显了 然后去xml里面看sql咋写的 写的sql如下:
5.如上图所示 按照我的习惯这两个字段都是字符串类型的 我一般都会加上判断!=null and !""的 因为在java代码里面都是习惯用lang3包中的StringUtils.IsNotBank 而这个StringUtils.IsNotBank是包含!=null 和 !""两种判断的 所以我立马加上了!""的判断 如下:
6.加上如上的判断数据就好了 但令我奇怪的是为啥在本地环境只写!null的判断是没问题的 因为这个sql不是我写的 我怀疑有可能是环境不同导致的字符编码出现了问题 具体啥原因还续做深入了解 如有知道的 欢迎留言评论 共同学习成长