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,而#{ }传入的是字符串带有引号,注意代码中两种用法的不同。

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

 

发布了19 篇原创文章 · 获赞 6 · 访问量 1145

猜你喜欢

转载自blog.csdn.net/ydyuse/article/details/104404909