Java 通过多个坐标边界过滤的mysql查询

Java 通过多个坐标边界过滤的mysql查询,java,mysql,geolocation,mybatis,boundary,Java,Mysql,Geolocation,Mybatis,Boundary,我有一个数据库,其中包含一个带有坐标的城市列表,我正在使用mybatis进行此查询,以查找给定边界的城市 SELECT * FROM cities WHERE lat > #{latMin} AND lat < #{latMax} AND lng > #{lngMin} AND lng < #{lngMax} 现在我有了多个边界,我多次调用该查询,以使所有城市都包含在所有边界中,而且速度越来越慢 为了加快速度,在不改变我的架构的情况下,我可以有一个输入可能非常长

我有一个数据库,其中包含一个带有坐标的城市列表,我正在使用mybatis进行此查询,以查找给定边界的城市

SELECT * FROM cities 
WHERE lat > #{latMin} 
AND lat < #{latMax} 
AND lng > #{lngMin} 
AND lng < #{lngMax}
现在我有了多个边界,我多次调用该查询,以使所有城市都包含在所有边界中,而且速度越来越慢

为了加快速度,在不改变我的架构的情况下,我可以有一个输入可能非常长的边界列表的查询吗?也许是存储过程

这个项目的限制是mybatis作为持久层,mysql作为数据库

编辑: 这是我目前的mybatis方法

List<CityDTO> getCityNearPoint(@Param("latMin") Double latMin, @Param("latMax") Double latMax, 
             @Param("lngMin") Double lngMin, @Param("lngMax") Double lngMax);
我不知道如何传递包含边界的对象数组并将它们映射到多个ORs。比如:

List<CityDTO> getCityNearBoundaries(BoundaryDTO[] boundaries);

只需使用或组合多个边界。您可以使用动态SQLS实现它。foreach或@SqlProvider注释的方法,该方法将生成适当的SQL字符串。我更喜欢使用动态SQL。 在xml中,它将如下所示:

<select id="selectCitiesByBoundaries" resultType="CityDTO">
  SELECT * FROM cities WHERE
  <foreach item="boundary" index="index" collection="#{boundaries}"
      open=" (" separator=") OR (" close=") ">
    lat > #{boundary.getLatMin()} AND
    lat < #{boundary.getLatMax()} AND
    lng > #{boundary.getLngMin()} AND
    lng < #{boundary.getLngMax()}
  </foreach>
</select>

我不明白如何传递一组对象并将它们映射到多个ORs。我将编辑我的问题以澄清。