您的位置:首页 > 数据库

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

2017-09-11 08:55 369 查看
今天在公司的项目中看到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好点;

附:本人菜鸟如有错误欢迎指正,谢谢诸位大佬;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐