sql语句,以id为例子,根据 id集合查询对应的数据,动态根据开始时间和结束时间查询

本文介绍了一种使用MyBatis框架实现动态SQL的方法,通过XML映射文件中的foreach和if标签来构造灵活的SQL查询语句。特别是针对数据收集器查询场景,能够处理设备ID集合为空的情况,并结合时间范围筛选,确保查询的灵活性与准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

xml映射文件:

 <select id="selectImages" resultType="org.jeecg.modules.supervise.device.entity.DataCollector">
        SELECT
        t1.*
        FROM
        data_collector t1
        WHERE
        t1.collector_id in
        <foreach item="id" collection="deviceCollectorIds" index="index" open="(" separator=","
                 close=")">
            #{id}
        </foreach>
        <if test="startTime != null and  startTime != ''">
            AND t1.collector_time between #{startTime} and #{endTime}
        </if>
        order by t1.collector_time desc
    </select>

 mapper文件:

    List<DataCollector> selectImages(List<String> deviceCollectorIds,
                                     String startTime,
                                     String endTime);

 测试:

SELECT
	t1.* 
FROM
	data_collector t1 
WHERE
	t1.collector_id IN (
	'100001172',
	'100001023',
	'100000711')

使用navicat 能够顺利查出数据:

 还有一种情况就是,传过来的id 集合有可能为空集,这时候可以结合动态sql:

    <select id="selectImages" resultType="org.jeecg.modules.supervise.device.entity.DataCollector">
        SELECT
        t1.*
        FROM
        data_collector t1
        <if test="deviceCollectorIds !=null">
            WHERE
            t1.collector_id in
            <foreach item="id" collection="deviceCollectorIds" index="index" open="(" separator=","
                     close=")">
                #{id}
            </foreach>
        </if>
        <if test="startTime != null and  startTime != ''">
            AND t1.collector_time between #{startTime} and #{endTime}
        </if>
        order by t1.collector_time desc
    </select>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值