美文网首页MyBatis+SpringMVC+SpringBoot
mybatis动态sql中test判断Boolean

mybatis动态sql中test判断Boolean

作者: 帮我的鸵鸟盖个章 | 来源:发表于2018-11-30 12:02 被阅读4次
mybatis中动态sql使用if test判断String,pojo一般写法如下(sql片段):

String

<if test="countryArea != null and countryArea != ''">
    AND country_area=#{countryArea}
</if>

pojo

<if test="map.keyWord != null and map.keyWord != ''">
    AND s.subject LIKE concat('%',#{map.keyWord},'%')
</if>
但是如果是Boolean类型,如果写成如下方式,会出现false无效的bug,一直执行的都是true
<update id="updateHaveNewComment">
        <choose>
            <when test="flag=true">
                UPDATE epc_subject_center s
                SET s.have_new_comment=1
                WHERE s.id=#{id}
            </when>
            <otherwise>
                UPDATE epc_subject_center s
                SET s.have_new_comment=0
                WHERE s.id=#{id}
            </otherwise>
        </choose>
    </update>
网上有一些资料说只用判断是否为null就可以了,个人检验是错误的。下面的也是错误的
<update id="updateHaveNewComment">
        <choose>
            <when test="flag !=null">
                UPDATE epc_subject_center s
                SET s.have_new_comment=1
                WHERE s.id=#{id}
            </when>
            <otherwise>
                UPDATE epc_subject_center s
                SET s.have_new_comment=0
                WHERE s.id=#{id}
            </otherwise>
        </choose>
    </update>

正确的写法应该是

<update id="updateHaveNewComment">
        <choose>
            <when test="flag">
                UPDATE epc_subject_center s
                SET s.have_new_comment=1
                WHERE s.id=#{id}
            </when>
            <otherwise>
                UPDATE epc_subject_center s
                SET s.have_new_comment=0
                WHERE s.id=#{id}
            </otherwise>
        </choose>
    </update>

或者

<update id="updateHaveNewComment">
        <choose>
            <when test="flag==true">
                UPDATE epc_subject_center s
                SET s.have_new_comment=1
                WHERE s.id=#{id}
            </when>
            <otherwise>
                UPDATE epc_subject_center s
                SET s.have_new_comment=0
                WHERE s.id=#{id}
            </otherwise>
        </choose>
    </update>

相关文章

  • mybatis动态sql中test判断Boolean

    mybatis中动态sql使用if test判断String,pojo一般写法如下(sql片段): String ...

  • 动态sql

    根据不同条件,需要执行不同的sql命令 MyBatis中动态sql是在mapper.xml中添加逻辑判断

  • MyBatis动态sql

    动态sql就是可以对sql语句进行灵活的封装,拼接。通过mybatis语法的判断可以实现动态sql。 1 if标签...

  • mybatis动态sql

    一 动态sql 1.1 什么是动态sql? mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对...

  • 第八章 动态SQL

    动态SQL中的元素介绍 动态SQL有什么作用 MyBatis提供了对SQL语句动态组装的功能 动态SQL中的元素 ...

  • MyBatis学习:动态sql

    1.动态sql 动态sql是mybatis中的一个核心,什么是动态sql?动态sql即对sql语句进行灵活操作,通...

  • 动态SQL

    动态SQL: Mybatis中可以在写mapper.xml时添加逻辑判断常用关键字:if、where、「choos...

  • mybatis动态sql中test的坑点总结

    简介 在mybatis中要实现动态sql,重要方式就是使用test,通过其中表达式返回的true、false来达到...

  • IT 每日一结

    mybatis动态sql 动态sql绝对是mybatis排列前几的闪光点之一。传统代码中的sql语句需要经过多个字...

  • 动态sql

    一、动态sql mybatis核心对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接、组装。 if...

网友评论

    本文标题:mybatis动态sql中test判断Boolean

    本文链接:https://www.haomeiwen.com/subject/pvaccqtx.html