因为查询条件的不确定,用到了where 1=1这样的权宜之计,
使用WHERE 1=1 之后,就不能使用索引了
且会遍历全表,显然在数据量比较大的情况下这是不能接受的
注:大部分版本的数据库还是对这个做了优化的,如果没有这个优化,可以参考如下操作
解决方法之一:在返回自定义sql之前检查sql,将不需要的where 1=1替换掉
public static String replaceForeverTrueSql(String originalSql) {
/**
* 先将不规范的空格去除 保证每个条件之间只含一个空格
*/
originalSql = originalSql.replaceAll(" +", " ");
/**
* 判断原始sql中是否包含1=1
*/
if (originalSql.contains("1=1")) {
// 包含则将sql 分为两段,以1=1为分隔符
String[] split = originalSql.split("1=1");
/**
* 主要看split[1]后半段,有没有包含And
*/
String afterHalfSql = split[1].trim();// 去除了前后的空格
/**
* 全部转换成大写 避免and 不规范的写法造成误判

最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



