解决——》if 字符串比较不生效

版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者。
https://blog.youkuaiyun.com/weixin_43453386/article/details/85681460

1、操作

在Mybatis的xml中,进行if判断

2、现象(错误信息)

<if test="type.equals('2')">
      and status = 0
</if>

其中type为传来的String类型参数,想比较其等于字符串2,但是判断不生效

3、原因

'2'被认为是char类型,和String类型不相等

单引号是char类型,双引号是string类型!

char——》字符,单引号,只能存储一个字符

String——》字符串,双引号,可以存储0个或多个字符,String是char的数组表现形式

4、解决

1) 改成双引号

<if test='type.equals("2")'>
      and status = 0
</if>

2) 加.toString()

<if test="type.equals('2'.toString())">
      and status = 0
</if>
### MyBatis字符串拼接的方法 在MyBatis中,字符串拼接可以通过多种方式实现,具体取决于实际的应用场景和技术需求。 #### 使用 `CONCAT` 函数进行简单字符串拼接 对于基本的字符串拼接操作,可以直接利用SQL内置函数来完成。例如,在MySQL中可以使用 `CONCAT()` 函数[^1]: ```sql SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users; ``` 此查询会返回由名字和姓氏组成的全名列表,中间以空格分隔。 #### 利用动态 SQL 实现复杂条件下的字符串拼接 当面对更复杂的业务逻辑时,则可能需要用到MyBatis提供的动态SQL特性来进行更加灵活多变的字符串组合。比如下面这个例子展示了如何基于某些条件决定是否加入额外的信息到最终的结果串去[^2]: ```xml <select id="selectUsersWithInfo" resultType="User"> SELECT user_id, <if test="includeName != null and includeName == true"> CONCAT(name, ' (', age, ')') as name_with_age </if> <if test="includeName == null or includeName != true"> name </if> FROM users </select> ``` 这段XML片段说明了如果传入参数`includeName`为真,则会在姓名后面加上年龄信息;反之则只显示原始的名字字段。 #### 自定义类型处理器处理特殊字符或格式转换 除了上述两种常见的做法之外,有时候还需要针对特定的数据做特殊的处理——这时就可以考虑编写自己的类型处理器(TypeHandler),用于解决诸如编码问题或是按照指定模式重写输入/输出数据流等问题[^3]。 例如创建一个专门用来去除首尾空白并转成大写的StringTrimUpperTypeHandler类: ```java public class StringTrimUpperTypeHandler extends BaseTypeHandler<String> { @Override public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, parameter.trim().toUpperCase()); } ... } ``` 之后可以在Mapper XML文件面注册该处理器,并应用于相应的列上即可生效。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值