文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Mybatis中<if>和<choose>的区别及“=”判断方式

2024-04-02 19:55

关注

<if>和<choose>的区别及“=”判断

在项目中xml文件经常会遇到在判断等于某个值时加什么条件不等于某个值的时候加什么条件

比如下面这个例子:

<if  test=" name != null">
    AND T.NAME = #{NAME,jdbcType=VARCHAR}
</if>
<if  test=" name  == null">
    ORDER BY NAME,ID
</if>

正确很好的写法需要引入<choose>标签

 <choose>
       <when test=" name != null">
          AND T.NAME = #{NAME,jdbcType=VARCHAR}
      </when>
     <otherwise>
        ORDER BY T.PRODUCT_TYPE_CODE, T.SORT DESC, T.CREATE_TIME
     </otherwise>
</choose>

第一种错误写法导致的结果就是不会去做任何判断即使name不为空。

为什么只能用<choose>标签,源码还没有研究,或者我这个例子本身就有问题现在记录下来,在后续的更新中我会再次总结一下这个问题。

<!--错误的写法-->

<if test="newsImage != null and newsImage == 'y'">  
    <![CDATA[ and len(newsImage) > 0 ]]>  
</if>  
<!-- 正确的,稳定,推荐使用 -->  
<if test="newsImage != null and newsImage == 'y'.toString()">  
    <![CDATA[ and len(newsImage) > 0 ]]>  
</if>  

判断 newsImage == 'y' 时,有人认为成功,但实际上是不成功的,需要改为  newsImage == 'y'.toString()方可成功,

原因具体没有细入研究,根据实际使用推测应该是 “等于” 在java中是个比较复杂问题,涉及的“等于”有可能是变量地址相等,或者是变量值内容相等,在XML文件中简单的 == 在经过MyBatis处理后无法判断是哪种类型的“相等”,所以加.toString()做强制转换操作,MyBatis就知道是值内容的比较,当然就成功了;

注意这个常量不限于数字,对于字母,如 'y' 同样需要加上 .toString()方可成功。

Mybatis选择choose和条件if用法

choose用法

        <choose>
            <when test="showType == 1">
                IFNULL(k.fname,'未知') as pro_name,
            </when>
            <when test="showType == 2">
                IFNULL(e.fname,'未知') as business_name,
            </when>
            <when test="showType == 3">
                IFNULL(f.fname,'未知') as area_name,
            </when>
            <when test="showType == 4">
                IFNULL(h.fname,'未知') as sale_name,
            </when>
            <otherwise>
                IFNULL(j.F_PJQD_XMDJ,'未知') as project_type,
            </otherwise>
        </choose>

if用法

        <if test="businessName != null and businessName != ''">
            and e.fname = #{businessName}
        </if>
        <if test="areaName != null and areaName != ''">
            and f.fname = #{areaName}
        </if>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯