String sql = "select * from sys_user where 1=2"与String sql = "select * from sys_user where 1=1的对比介绍

来源:互联网 发布:svm算法 编辑:程序博客网 时间:2024/06/04 18:23


今天在公司的项目中看到String sql = "select * from sys_user where 1=2";还有String sql = "select * from sys_user where 1=1";这些sql语句,看了半天不大明白什么意思,请教了一下大佬,总结整理了一下;
String sql = "select * from sys_user where 1=2和
String sql = "select * from sys_user where 1=1的比较;
相同点:可以拼接字符串;
比如:
String sql="select * from user where 1=1 "; 


if(username!=null) sql=sql+ " and username='"+username+"'"; 


if(password!=null) sql=sql+ " and password='"+password+"'"; 


select id from sys_user where 1=1
<if test="username !=null and password != ''">
AND name = #{name}
</if>
<if test="firstType !=null and firstType != ''">
AND firstType = #{firstType}
</if>
<if test="secondType !=null and secondType != ''">
AND secondType = #{secondType}
</if>


因为我这里是动态查询,假如第一个条件不成立,那么如果我没有使用 1 = 1 ,
我的SQL就会变成 select XXX from XXX where  and XXXX ,
如果我加了1 = 1,就会变成 select XXX from XXX where 1 = 1 and XXXX;
从这里面可以看出在动态sql中.加了这个1=1是可以拼接sql语句的;
不同点:
String sql="select * from user where 1=1 "; 
此sql返回的永远为真,也就是true,
可以理解为条件永远为真,查出的是所有数据;
相当于String sql="select * from user;
比如:
String sql="select * from user where 1=1 "; 


if(username!=null) sql=sql+ " and username='"+username+"'"; 


if(password!=null) sql=sql+ " and password='"+password+"'"; 


后面两个条件username,password两者都为空也是可以查询的,因为还有前面的查询条件;
String sql = "select * from sys_user where 1=2
此sql返回的永远为假,也就是false,
可以理解为where条件不成立,虽然执行了查询,但是返回的是空数据;
使用这句sql永远不能查询到数据;
建议使用上面的1=1好点;
附:本人菜鸟如有错误欢迎指正,谢谢诸位大佬;
原创粉丝点击