我必须根据数据库中的1个值来查询价格。数据库表包含40000个带有id,name,minvalue,maxvalue,price的条目。我用例如
查找值2的正确价格SELECT name, price FROM priceTable WHERE minvalue <= 2 AND maxvalue >= 2;
因为我必须查找许多价格(10000及以上),我考虑使用类似HashMap的内容,其中包含所有表数据,所以我只有1个数据库请求,其余的将在本地完成。
有没有人经历过这个?是否可以将SQL请求“转换”为有效的HashMap查找?我无法使用该值作为查找键,因为例如上面例子的匹配条目有minvalue 1和maxvalue 3.所以没有键“2”。
答案 0 :(得分:1)
Java提供了NavigableMap
接口,它提供了一些有趣的导航方法,包括:
subMap(fromKey::inclusive, toKey::exclusive)
headMap(toKey, boolean inclusiveOrNot)
tailMap(fromKey, boolean inclusiveOrNot)
它适用于一种类型的键(为方便起见,它说它在某种程度上等同于sql索引;这里需要两个索引)。因此,在您的情况下,您需要使用两个不同的地图存储priceTable
,一个用于minValue,一个用于maxValue,例如:
NavigableMap<Double, List<Product>> minValueMap = new TreeMap<Double, List<Product>>();
NavigableMap<Double, List<Product>> maxValueMap = new TreeMap<Double, List<Product>>();
然后,要获得minvalue <= 2 AND maxvalue >= 2
,你必须运行:
Map<Double, List<Product>> minConditionMap = minValueMap.headMap(2, true);
Map<Double, List<Product>> maxConditionMap = maxValueMap.tailMap(2, true);
您的结果是这些地图的交集(请参阅here)