mybatis中test条件的引号及等于问题

背景

有时候我们需要这样的sql语句

select * from student where name = '张三';

我的业务场景是需要name不为null且name不为空字符串且name为张三的时候执行某些逻辑
这时在使用mybatis的xml文件写条件的时候经常误写成如下形式

<if test="name != null and name !='' and name = '张三'">
	AND name = #{name}
</if>

问题

上边的代码有两个问题

  • 问题一:在传入字符串参数如’李四’时,sql语句会报错
    具体原因:name = '张三’出现错误,因为是字符串做比较,所以使用=会报错,正确的写法应该用equals,正确的写法如下:
<if test="name != null and name !='' and name.equals('张三')">
	AND name = #{name}
</if>
  • 问题二:当改成equals写法后,程序运行还是有问题
    具体原因:这就涉及到单双引号的问题了,首先需要说明一下:xml文件中的test条件,外面用双引号,里面就需要用单引号,外面用单引号,里面就需要用双引号;如下所示:
    在这里插入图片描述
    但是,当在test条件使用了equals以后,外面用双引号,里面的张三字符串用单引号程序就会出现问题,具体原因还不清楚,个人猜测和Java程序有关系,因为在Java中字符串的比较使用双引号,反正感觉挺玄学的,有知道的大佬可以评论里解释一下。所以最终正确的写法应该如下所示:
<if test='name != null and name !="" and name.equals("张三")'>
	AND name = #{name}
</if>
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis的if标签可以用于多条件判断。使用if标签可以根据给定的条件来动态生成SQL语句。if标签的使用方法简单,通常与test属性联合使用。语法如下: ``` <if test="判断条件"> SQL语句 </if> ``` 在判断条件,可以使用多种比较运算符来进行逻辑判断。例如,gt表示大于,gte表示大于等于,eq表示等于,neq表示不等于,lt表示小于,lte表示小于等于。需要注意的是,判断条件需要用双引号包裹,而字符串需要用单引号包裹。但是需要注意的是,由于XML语法的限制,判断条件不能直接使用小于号(<),否则会报错。 如果需要同时判断多个条件,可以使用and和or来组合条件。例如: ``` <if test="条件1 and 条件2"> SQL语句 </if> <if test="条件1 or 条件2"> SQL语句 </if> ``` 这样可以根据不同的条件生成不同的SQL语句,以满足不同的需求。 总之,MyBatis的if标签可以实现多条件判断,使得生成的SQL语句更加灵活和可定制化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [mybatis<if>标签bool值类型为false判断方法](https://download.csdn.net/download/weixin_38685831/12747688)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [MyBatis if标签:条件判断](https://blog.csdn.net/qq_25073223/article/details/128066073)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [mybatis if条件判断](https://blog.csdn.net/JacaCao/article/details/108206499)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值