MYBATIS使用对象传入参数,SQL中显示的参数始终为‘NULL’

项目场景:

项目场景:自建站站点,访问量,访问人数统计


问题描述

后端接收到对象有参数,mybatis识别后一直是null

c.h.w.d.V.sumsyslist_COUNT               : ==> Parameters: 2022-05-29(String), null,

原因分析:

<if test="ldatend = null and ldatestart = null">

sql太长中间重复部分,参数表达式有误


解决方案:

mybatis中sql 标签判断不规范 '='改为'=='

<if test="ldatend != null and ldatend != ''">
    and left(t1.ldate, 10) &lt;= left(#{ldatend}, 10)
</if>

 出错场景复现:

SELECT ta1.sys,total,IFNULL(totalM,0) totalM,IFNULL(totalD,0) totalD,IFNULL(totalP,0) totalP,IFNULL(totalMP,0) totalMP,IFNULL(totalDP,0) totalDP FROM (SELECT t1.sys,count(0) total FROM `ct_visitlogs` t1
        <where>
            1=1
            <if test="ldatestart != null and ldatestart != ''">
                and left(t1.ldate, 10) &gt;= left(#{ldatestart}, 10)
            </if>
            <if test="ldatend != null and ldatend != ''">
                and left(t1.ldate, 10) &lt;= left(#{ldatend}, 10)
            </if>
            <if test="whe != null and whe != ''">
                and 2=2 and #{whe}
            </if>
            <if test="lacc != null and lacc != ''">
                and 3=3 and #{lacc}
            </if>
        </where>
           group by t1.sys ) ta1

		left join (SELECT t2.sys,count(0) totalM FROM `ct_visitlogs` t2
        <where>
            1=1
            <if test="ldatestart != null and ldatestart != ''">
                and left(t2.ldate, 10) &gt;= left(#{ldatestart}, 10)
            </if>
            <if test="ldatend != null and ldatend != ''">
                and left(t2.ldate, 10) &lt;= left(#{ldatend}, 10)
            </if>
            <if test="ldatend == null and ldatestart == null">
                and left(t2.ldate, 7) = left(NOW(), 7)
            </if>
        </where>
		group by t2.sys) ta2 on ta2.sys =ta1.sys

		left join (SELECT t2.sys,count(0) totalD FROM `ct_visitlogs` t2
        <where>
            1=1
            <if test="ldatestart != null and ldatestart != ''">
                and left(t2.ldate, 10) &gt;= left(#{ldatestart}, 10)
            </if>
            <if test="ldatend != null and ldatend != ''">
                and left(t2.ldate, 10) &lt;= left(#{ldatend}, 10)
            </if>
            <if test="ldatend == null and ldatestart == null">
                and left(t2.ldate, 10) = left(NOW(), 10)
            </if>
        </where>
		group by t2.sys) ta3 on ta3.sys =ta1.sys

		left join (select count(0) totalP,sys from (SELECT sys,t1.ip,count(0) FROM `ct_visitlogs` t1 where sys=any(SELECT t1.sys FROM `ct_visitlogs` t1
        <where>
            1=1
            <if test="ldatestart != null and ldatestart != ''">
                and left(t1.ldate, 10) &gt;= left(#{ldatestart}, 10)
            </if>
            <if test="ldatend != null and ldatend != ''">
                and left(t1.ldate, 10) &lt;= left(#{ldatend}, 10)
            </if>
        </where>
			) group by t1.ip) t group by sys)  ta4 on ta4.sys =ta1.sys

		left join (select count(0) totalMP,sys from (SELECT sys,t1.ip,count(0) FROM `ct_visitlogs` t1 where sys=any(SELECT t1.sys FROM `ct_visitlogs` t1
        <where>
            1=1
            <if test="ldatestart != null and ldatestart != ''">
                and left(t1.ldate, 10) &gt;= left(#{ldatestart}, 10)
            </if>
            <if test="ldatend != null and ldatend != ''">
                and left(t1.ldate, 10) &lt;= left(#{ldatend}, 10)
            </if>
            <if test="ldatend == null and ldatestart == null">
                and left(t1.ldate, 7) = left(NOW(), 7)
            </if>
        </where>
		) group by t1.ip) t group by sys)  ta5 on ta5.sys =ta1.sys

		left join (select count(0) totalDP,sys from (SELECT sys,t1.ip,count(0) FROM `ct_visitlogs` t1 where sys=any(SELECT t1.sys FROM `ct_visitlogs` t1
        <where>
            1=1
            <if test="ldatestart != null and ldatestart != ''">
                and left(t1.ldate, 10) &gt;= left(#{ldatestart}, 10)
            </if>
            <if test="ldatend != null and ldatend != ''">
                and left(t1.ldate, 10) &lt;= left(#{ldatend}, 10)
            </if>
            <if test="ldatend == null and ldatestart == null">
                and left(t1.ldate, 10) = left(NOW(), 10)
            </if>
        </where>
		) group by t1.ip) t group by sys)  ta6 on ta6.sys =ta1.sys

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值