SpringBoot查询接口传入参数为List,XML的写法

✉️ 查询业务

   ➿ 目前互联网项目的诸多业务中数查询业务居多,而查询业务中又数展示类接口、报表类接口是我们接触最多的查询类接口。在实际项目中,不是全局查询数据就做完了业务,这样的需求也没有意义。条件查询因此作为最普遍的查询业务,涉及到各种条件使查询的数据结果规范化和合理化。

✉️ 条件查询

   ➿ 条件查询本质上在sql层面是包含在where条件中的语句,SpringBoot接口传参一般都是多个字段组合构成,那么对应的where中就包含多个条件语句。传参只由基本数据类型字段组成是我们一开始做得最多的业务,注意点不多,这里就不再做过多阐述。下面就传参是List集合类型字段时,聊聊在代码层面的撰写方式。

📫 实例演示

   🔍应用最好的解答方式就是通过实际案例演示,下面就此进行展开。

   🔒实例应用:如何查询某个时间段内多个路段在多个方向上的车流量?

🔑① 构建返回的实体类RoadSectionTrafficVolume

@Data
public class RoadSectionTrafficVolume {
          
   

    @ApiModelProperty("****")
    private String roadSectionName;

    @ApiModelProperty("****")
    private String direction;

    @ApiModelProperty("****")
    private Integer vehicleCnt;

}

🔑② mapper层面

其中查询条件中包含开始时间,结束时间,方向及路段名称两个List集合

List<RoadSectionTrafficVolume> selectEveryRoadSectionTrafficList(@Param("beginDate")String beginDate, @Param("endDate")String endDate,
                                                                     @Param("directionList")List<String> directionList, @Param("roadSectionNameList")List<String> roadSectionNameList);

🔑③ XML写法

🔨 其中传参为List类型数据时,需要借助<foreach> </foreach>,与本人之前的文章:有相似之处(大家可以此为参考),但是又不是全部相同,毕竟一个是插入操作,另外一个查询操作。

🔨 这里给出一个项目中的Tip:像List这种多数据字段的条件sql语句用“in”语句将其条件进行包含,尽量少用or,因为踩过坑😂

🔨 下面的XML语句中,有曾未说明的元素属性需要做解释为: open = "(" :该语句遇到 "(" 以此作为开始标志; close = ")" :该语句遇到 ")" 以此作为结束标志。

<select id="selectEveryRoadSectionTrafficList" resultType="com.***.RoadSectionTrafficVolume">
    SELECT road_section_name AS roadSectionName, direction, SUM(vehicle_cnt) AS vehicleCnt
    FROM dws_road_section_traffic_volume
    WHERE formatDateTime(toDateTime(loadtime),%Y-%m-%d %H:%M) &gt;= #{beginDate}
    AND formatDateTime(toDateTime(loadtime),%Y-%m-%d %H:%M) &lt; #{endDate}
    AND road_section_name in
    <foreach collection="roadSectionNameList" item="roadSectionNameList" index="index" open="(" close=")" separator=",">
        #{roadSectionNameList}
    </foreach>
    AND direction in
    <foreach collection="directionList" item="directionList" index="index" open="(" close=")" separator=",">
        #{directionList}
    </foreach>
    GROUP BY road_section_name , direction
</select>
经验分享 程序员 微信小程序 职场和发展