开发的时候用到了&&函数,实际使用时发现被替换成了AND。
预期执行sql,左侧是个数组字段,右侧是个子查询出来的数组
select array[1,2] && (select arrayFiled from t_test where id = 1)
实际执行sql,&&被换成了AND
select array[1,2] AND (select arrayFiled from t_test where id = 1)
后来发现有子查询时才会被替换成AND,如下所示,第二种情况下是没问题的
select array[1, 2] && (select arrayFiled from t_test where id = 1);
select array[1, 2] && array[2, 3];
参考了一篇帖子后发现了问题,是Pagehelper插件中用到的jsqlparser的问题。原文点击跳转
实践后找到以下版本是可以正常用的
jsqlparser1.4版本及以下可用,1.4版本以上到3.1版本是有问题的,从3.2版本后修复了这个问题
mybatis从5.2.0版本升级jsqlparser的版本到了3.2
如果使用的是springboot的mybatis的话,对应的是1.3.0版本