“Where 1 = 1 的存在意义”的版本间的差异
		
		
		
		
		
		跳到导航
		跳到搜索
		
				
		
		
	
Jihongchang(讨论 | 贡献)  | 
				Jihongchang(讨论 | 贡献)   | 
				||
| 第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:26的版本
示例
场景是我们要实现一个这样的常见查询功能:
根据 书的名字 和 作者的名字 查询书籍,但 书的名字 和 作者的名字 又都不是必填项,可填、可不填。
那么在进行 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 仍然可以存在