mybatis中if标签判断字符串相等

今日按需求在mapper.xml中修改完一条sql的条件,感觉很轻松,如下所示:

<if test="companyId != null and companyId !='' ">  
    <if test="companyFlag == '1'">   
        AND COMPANY_ID = #{companyId,jdbcType=VARCHAR}  
    </if>  
    <if test="companyFlag == '0'">   
        AND COMPANY_ID != #{companyId,jdbcType=VARCHAR}  
    </if> 
</if>

结果sql执行的结果却让我轻松不起来,明明companyId和companyFlag这两个字段不为空,但是在打印的日志sql中却没有这个条件,将上述sql改为如下所示:

<if test="companyId != null and companyId !='' ">  
    and 1 = 1
    <if test="companyFlag == '1'">   
        AND COMPANY_ID = #{companyId,jdbcType=VARCHAR}  
    </if>  
    <if test="companyFlag == '0'">   
        AND COMPANY_ID != #{companyId,jdbcType=VARCHAR}  
    </if> 
</if>

执行sql后发现日志将and 1 = 1 打印出来了,还是没有COMPANY_ID这个条件,于是意识到是companyFlag的判断条件出了问题,在网上一顿搜索后,发现了说明:
mybatis 映射文件中,if标签判断字符串相等
两种方式:因为mybatis映射文件,是使用的ognl表达式,所以在判断字符串sex变量是否是字符串Y的时候使用

<test="sex=='Y'.toString()">或者<test = 'sex== "Y"'>

将自己的sql改为:

<if test="companyId != null and companyId !='' ">  
    <if test="companyFlag == '1'.toString() ">   
        AND COMPANY_ID = #{companyId,jdbcType=VARCHAR}  
    </if>  
    <if test="companyFlag == '0'.toString() ">   
        AND COMPANY_ID != #{companyId,jdbcType=VARCHAR}  
    </if> 
</if>

再次调用sql,则条件正常可用了。


作者:chengsi101
来源:CSDN
原文:https://blog.csdn.net/chengsi101/article/details/78804224
版权声明:本文为博主原创文章,转载请附上博文链接!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 6,205评论 0 4
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,895评论 0 9
  • MyBatis 理论篇 [TOC] 什么是MyBatis  MyBatis是支持普通SQL查询,存储过程和高级映射...
    有_味阅读 3,166评论 0 26
  • 编写日志输出环境配置文件 在开发过程中,最重要的就是在控制台查看程序输出的日志信息,在这里我们选择使用 log4j...
    我没有三颗心脏阅读 6,898评论 0 33
  • 这部分主要是开源Java EE框架方面的内容,包括Hibernate、MyBatis、Spring、Spring ...
    杂货铺老板阅读 1,552评论 0 2

友情链接更多精彩内容