<if test="param.cityName != null and (param.cityName !='全国' or param.cityName != '全市')"> and city_name =#{param.cityName} </if>为什么param.cityName为全国还会执行
时间: 2024-04-07 19:28:03 浏览: 84
根据你提供的代码,<if test="param.cityName != null and (param.cityName !='全国' or param.cityName != '全市')"> and city_name =#{param.cityName} </if>这段代码的意思是:如果param.cityName不为null且param.cityName不等于'全国'或者param.cityName不等于'全市',则执行and city_name =#{param.cityName}。因此,当param.cityName为'全国'时,第一个判断条件为true,第二个判断条件为false,整个判断条件为true,所以会执行and city_name =#{param.cityName}。如果你想要当param.cityName为'全国'时不执行and city_name =#{param.cityName},可以将判断条件修改为<if test="param.cityName != null and param.cityName !='全国' and param.cityName != '全市'"> and city_name =#{param.cityName} </if>。
相关问题
<if test="param.cityName != null and ( param.cityName neq'全国' or param.cityName neq '全市')"> and city_name =#{param.cityName} </if>是否正确
这段代码的语法是错误的。如果要实现两个条件的 OR 判断,在语法上需要使用 `or` 关键字来连接两个条件,而不是使用逻辑非操作符 `neq`。
正确的语法应该是:
```xml
<if test="param.cityName != null and (param.cityName != '全国' or param.cityName != '全市')">
and city_name = #{param.cityName}
</if>
```
在这个例子中,使用了逻辑运算符 `and` 将两个条件连接起来,表示这两个条件都必须成立。其中,第二个条件使用了逻辑运算符 `or` 将两个条件连接起来,表示只要其中一个条件成立,整个条件表达式就为真。
需要注意的是,`test` 属性中的条件表达式需要使用 OGNL 表达式语言来编写。在这个例子中,假设 `param.cityName` 是一个字符串类型的变量,那么可以使用以下语法:
```xml
<if test="param.cityName != null and (param.cityName != '全国' or param.cityName != '全市')">
and city_name = #{param.cityName}
</if>
```
如果 `param.cityName` 不是 null,且它的值不是 `'全国'` 或 `'全市'`,整个条件表达式就为真,将会执行 `<if>` 标签中的 SQL 语句。否则,将会忽略这个标签,不执行任何 SQL 语句。
阅读全文