赞
踩
select* from table where 1=1,其中where 1=1,由于1=1永远是成立的返回true,条件为真所以,这条语句就相当于select * from table,返回查询表中的所有数据,并不会影响查询速度和引起sql注入。
使用where 1=1 带来的便利:
String sqlStr = "select * from table where 1=1";
if(user.getUsername()!=""){
sqlStr = sqlStr + "username=" + user.getUsername();
}
if(user.getPassword()!=""){
sqlStr = sqlStr + "and password=" + user.getPassword();
}
当if条件不成立时 sqlStr = “select * from table where 1=1” sql可以正常运行,如果没有 1=1 这个条件 sqlStr = “select * from table where” sql运行时会报错。
言下之意就是:加上1=1可以应付多变的查询条件,仅仅只是为了满足多条件查询页面中不确定的各种因素而采用的一种构造一条正确能运行的动态 SQL语句的一种方法,并没有其他影响。
mybatis 框架可以通过where标签来代替1=1的作用。
<select id="getUserInfo" resultType="map">
SELECT username,sex
FROM user
<where>
<if test=" username!='' and username!= null ">
username = #{username}
</if>
<if test=" sex!='' and sex!= null ">
AND sex = #{sex}
</if>
</where>
</select>
where 标签知道只有在一个以上的if条件有值的情况下才去插入“WHERE”子句。而且若最后的内容是“AND”或“OR”开头的,where 元素也知道如何将他们去除。
还有其他框架也支持写法类似!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。