SSM框架中Mybatis 根据传入参数动态生成表名查询数据

问题描述:

根据传入的参数-设备ID(deviceID),在mapper.xml 文件中直接根据传入的参数,动态生成查询表名,如设备ID为19,则生成表名 DEVICE_000019。(数据库采用MYSQL)

解决方法:

  1. 在外边动态生成表名后直接作为参数传入。
  2. 直接在mapper.xml动态生成

       代码示例如下:

 

<select id="datalistPageByDeviceID" parameterType="page" resultType="pd">

      select

      <include refid="Field"></include>

      from

 

      <if test="pd.DEVICEID.length()==6">

          DEVICE_${pd.DEVICEID}

       </if>

      <if test="pd.DEVICEID.length()==5">

          DEVICE_0${pd.DEVICEID}

       </if>

      <if test="pd.DEVICEID.length()==4">

          DEVICE_00${pd.DEVICEID}

       </if>

      <if test="pd.DEVICEID.length()==3">

          DEVICE_000${pd.DEVICEID}

       </if>

      <if test="pd.DEVICEID.length()==2">

          DEVICE_0000${pd.DEVICEID}

       </if> 

      <if test="pd.DEVICEID.length()==1">

          DEVICE_00000${pd.DEVICEID}

       </if> 

     

      where 1=1

      and DEVICEID = #{pd.DEVICEID}

       <if test="pd.lastStart ==null or pd.lastStart ==''">        and COLLECTTIME &gt; NOW( )-interval 1 day

      </if>

      order by COLLECTTIME desc

   </select>

代码关键说明:

1、表名不能用CONCAT,如CONCAT('DEVICE_', #{pd.DEVICEID})这种方式。

2、注意${ }直接传入SQL,而#{ }传入的是字符串带有引号,注意代码中两种用法的不同。

本文仅是自己解决实际问题的总结,高手一笑。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值