SQL中为什么不要使用1=1?
共 3970字,需浏览 8分钟
·
2024-08-19 07:40
阅读本文大概需要 4 分钟。
来自:
为什么会使用 1=1?
SELECT
*
FROM
table
WHERE
1 = 1 < if test = 'username != null' >
AND username = # { username } < / if > < if test = 'age > 0' >
AND age = # { age } < / if >
1=1 带来的问题
-
代码清晰性: 在复杂的SQL中,避免“1=1”这种引起歧义。 -
习惯: 代码规范。 -
兼容: 跨数据的兼容性。避免有的数据库无法进行优化掉“1=1”这种条件造成的全表扫描。
替代 1=1 的更佳做法
<!-- MyBatis映射文件片段 -->
<select id='selectUsersByConditions' parameterType='map' resultType='com.example.User'>
SELECT * FROM user
<where>
<!-- 使用if标签动态添加条件 -->
<if test='username != null and username != '''>
AND username = #{username}
</if>
<if test='age > 0'>
AND age = #{age}
</if>
<!-- 更多条件... -->
</where>
</select>
<if>
)来构建条件查询。<where>
标签会自动处理首条条件前的 AND 或 OR。当没有满足条件的 <if>
或其他条件标签时,<where>
标签内部的所有内容都会被忽略,从而不会生成多余的 AND 或 WHERE 子句。
var query = context.User.AsQueryable();
if (!string.IsNullOrEmpty(username))
{
query = query.Where(b => b.UserName.Contains(username));
}
if (age>0)
{
query = query.Where(b => b.Age = age);
}
var users = query.ToList();
总结
<END>
推荐阅读:
Spring-Security 认证流程分析及多方式登录认证实践
程序员在线工具站:cxytools.com 推荐一个自己写的工具站:http://cxytools.com,专为程序员设计,包括时间日期、JSON处理、SQL格式化、随机字符串生成、UUID生成、文本Hash...等功能,提升开发效率。
⬇戳阅读原文直达! 朕已阅