“Where 1 = 1 的存在意义”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
(未显示同一用户的1个中间版本) | |||
第4行: | 第4行: | ||
根据 <u>书的名字</u> 和 <u>作者的名字</u> 查询书籍,但 <u>书的名字</u> 和 <u>作者的名字</u> 又都不是必填项,可填、可不填。 | 根据 <u>书的名字</u> 和 <u>作者的名字</u> 查询书籍,但 <u>书的名字</u> 和 <u>作者的名字</u> 又都不是必填项,可填、可不填。 | ||
− | 那么在进行 SQL 拼接的时候就可以: | + | 那么在进行 SQL 拼接的时候就可以:<syntaxhighlight lang="java"> |
+ | public String getSQL(String bookName, String author) { | ||
+ | String initSQL = "select * " + | ||
+ | "from book " + | ||
+ | "where 1 = 1 "; | ||
+ | StringBuffer buffer = new StringBuffer(initSQL); | ||
+ | if (StringUtils.isNotBlank(bookName)) { | ||
+ | buffer.append("and book_name like '%").append(bookName).append("%' "); | ||
+ | } | ||
− | + | if (StringUtils.isNotBlank(author)) { | |
− | + | buffer.append("and author like '%").append(author).append("%' "); | |
− | + | } | |
− | + | return buffer.toString(); | |
− | + | } | |
+ | </syntaxhighlight> | ||
+ | 所以 <code>1 = 1</code> 的作用其实是把 <code>where</code> 固定下来,即便一个条件都没有,<code>where</code> 仍然可以存在 |
2023年8月15日 (二) 03:27的最新版本
示例
场景是我们要实现一个这样的常见查询功能:
根据 书的名字 和 作者的名字 查询书籍,但 书的名字 和 作者的名字 又都不是必填项,可填、可不填。
那么在进行 SQL 拼接的时候就可以:
public String getSQL(String bookName, String author) {
String initSQL = "select * " +
"from book " +
"where 1 = 1 ";
StringBuffer buffer = new StringBuffer(initSQL);
if (StringUtils.isNotBlank(bookName)) {
buffer.append("and book_name like '%").append(bookName).append("%' ");
}
if (StringUtils.isNotBlank(author)) {
buffer.append("and author like '%").append(author).append("%' ");
}
return buffer.toString();
}
所以 1 = 1
的作用其实是把 where
固定下来,即便一个条件都没有,where
仍然可以存在