问题描述:
根据传入的参数-设备ID(deviceID),在mapper.xml 文件中直接根据传入的参数,动态生成查询表名,如设备ID为19,则生成表名 DEVICE_000019。(数据库采用MYSQL)
解决方法:
- 在外边动态生成表名后直接作为参数传入。
- 直接在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 > NOW( )-interval 1 day
</if>
order by COLLECTTIME desc
</select>
代码关键说明:
1、表名不能用CONCAT,如CONCAT('DEVICE_', #{pd.DEVICEID})这种方式。
2、注意${ }直接传入SQL,而#{ }传入的是字符串带有引号,注意代码中两种用法的不同。
本文仅是自己解决实际问题的总结,高手一笑。