【Mybatis中if、when标签判断不生效】

Mybatis中if标签判断不生效问题

mybatis映射文件中if、when判断失效

<if test="query.regionCode !=null and query.regionCode!=''">
                <if test="query.regionLevel !=null and query.regionLevel != ''">
                    <choose>
                        <when test="query.regionLevel=='2'">
                            AND STREET_CODE is null
                        </when>
                        <when test="query.regionLevel=='3'">
                            and DISTRICT_CODE = #{query.regionCode}
                        </when>
                        <when test="query.regionLevel=='4'">
                            and STREET_CODE = #{query.regionCode}
                        </when>
                    </choose>
                </if>
            </if>

分析原因:mybatis是用OGNL表达式来解析的,在OGNL的表达式中,'0’会被解析成字符,java是强类型的,char 和 一个string 会导致不等,所以if、when等条件判断标签中的sql不会被解析。

解决方法1: 通过 .toString()将’0‘转为字符串

 <if test="query.regionCode !=null and query.regionCode!=''">
                <choose>
                    <when test="query.regionLevel != null and query.regionLevel == '2'.toString()">
                        AND STREET_CODE is null
                    </when>
                    <when test="query.regionLevel != null and query.regionLevel == '3'.toString()">
                        AND DISTRICT_CODE = #{query.regionCode}
                    </when>
                    <when test="query.regionLevel != null and query.regionLevel == '4'.toString()">
                        AND STREET_CODE = #{query.regionCode}
                    </when>
                </choose>
            </if>

解决方法2:单引号 换成双引号

 <if test="query.regionCode !=null and query.regionCode!=''">
                <choose>
                    <when test='query.regionLevel != null and query.regionLevel == "2"'>
                        AND STREET_CODE is null
                    </when>
                    <when test='query.regionLevel != null and query.regionLevel == "3"'>
                        AND DISTRICT_CODE = #{query.regionCode}
                    </when>
                    <when test='query.regionLevel != null and query.regionLevel == "4"'>
                        AND STREET_CODE = #{query.regionCode}
                    </when>
                </choose>
            </if>

解决方法3:java 传值为 数值类型 Integer int

 <if test="query.regionCode !=null and query.regionCode!=''">
                <choose>
                    <when test='query.regionLevel != null and query.regionLevel == 2'>
                        AND STREET_CODE is null
                    </when>
                    <when test='query.regionLevel != null and query.regionLevel == 3'>
                        AND DISTRICT_CODE = #{query.regionCode}
                    </when>
                    <when test='query.regionLevel != null and query.regionLevel == 4'>
                        AND STREET_CODE = #{query.regionCode}
                    </when>
                </choose>
            </if>
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值