温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

mybatis中数字字符串比对的示例分析

发布时间:2021-12-30 09:27:59 来源:亿速云 阅读:159 作者:小新 栏目:互联网科技

小编给大家分享一下mybatis中数字字符串比对的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

在mybatis开发过程中有需要在sql中判断查询哪张表,如下sql:

SELECT
        a.tag_name,
        a.tag_id,
        count( 0 ) AS base_total
        FROM
       mm_dd_body a
        <if test="tagType!=null and tagType == '0'">
            LEFT JOIN ccc AS b ON b.tag_body_id = a.id
        </if>
        <if test="tagType!=null and tagType == '1'">
            <![CDATA[
        left join `vvvv` `b` on CONVERT ( concat( '-', `b`.`mark_rule_key` ) USING utf8mb4 ) REGEXP concat( '(\\(|[[:blank:]]+|-){1,}', `a`.`column_name`, '(>|<|>=|<=|=|[[:blank:]])+' )
        AND b.tag_id IN ( SELECT tag_id FROM gggg WHERE product = a.product )
        ]]>
        </if>
        WHERE
        a.tag_base_cat = #{tagType}
        AND a.del = 0

在运行时发现不管tagType传什么值都不会进入两个if中, 经过分析,'1'是会被转成数字,所以这里有两种方案: 方案1:将参数转为int类型,再进行比较

 <if test="tagType!=null and tagType == 0 ">
            LEFT JOIN ccc AS b ON b.tag_body_id = a.id
        </if>

方案二:将数字转成字符串,加上.toString(),如下:

    <if test="tagType!=null and tagType == '0'.toString()">
            LEFT JOIN ccc AS b ON b.tag_body_id = a.id
        </if>

当然上面的设计本就不是一个好的设计,违背了单一职责原则,可以将if判断剥离成两个单独select,然后在业务层去判断是使用哪个,这也是一种好的方案,可以规避不少坑

看完了这篇文章,相信你对“mybatis中数字字符串比对的示例分析”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI