前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mybatis坑之数字字符串比对原

mybatis坑之数字字符串比对原

作者头像
一笠风雨任生平
发布2020-04-23 16:52:46
1.6K0
发布2020-04-23 16:52:46
举报
文章被收录于专栏:服务化进程服务化进程

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

代码语言:javascript
复制
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类型,再进行比较

代码语言:javascript
复制
 <if test="tagType!=null and tagType == 0 ">
            LEFT JOIN ccc AS b ON b.tag_body_id = a.id
        </if>

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

代码语言:javascript
复制
    <if test="tagType!=null and tagType == '0'.toString()">
            LEFT JOIN ccc AS b ON b.tag_body_id = a.id
        </if>

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档