有时候我们会碰见复杂的逻辑处理,嵌套多层 for 循环,在循环中又进行多次查询,导致效率低下。
在碰见这类问题的时候,可以先分析数据逻辑,将一些固定的数据查询出来,放入内存中,
for循环查询的时候通过key值来查找对应的value,这样查询效率会提高很多。
例如下面test1()方法,碰见多层逻辑判断,多次数据库连接查询时,效率大大降低。
public void test1(){
SMTDaoAbstract dao = SMTApp.getSMTDaoDefault();
List<Map<String,Object>> codingList;
codingList = dao.selectListMap("ClassificationCoding.selectClassification",null);
if (codingList.size()>0){
for (Map<String,Object> objectMap : codingList){
String num = String.valueOf(objectMap.get("num"));
if (!"".equals(num)){
List<Map<String,Object>> childrenList;
childrenList = dao.selectListMap("ClassificationCoding.selectClassification",null);
if (childrenList.size()>0){
for (Map<String,Object> childrenObject : childrenList){
System.out.println(childrenObject.get("id"));
}
}
}
}
}
}
我们可以将需要进行判断的一些固定值查出来放在内存中,然后解下来的判断从内存中查找。
public void test2(){
Map<String,String> queryObject = new HashMap<>();
loadRegionRel(queryObject);
if ((queryObject.get("pCode") != null)&&(!queryObject.get("pCode").equals(""))){
System.out.println("true");
}else {
System.out.println("false");
}
}
private void loadRegionRel(Map<String, String> regionMap) {
List<Map<String,Object>> regionList;
SMTDaoAbstract dao = SMTApp.getSMTDaoDefault();
regionList = dao.selectListMap("ClassificationCoding.selectClassification",null);
for (Map<String,Object> map : regionList){
regionMap.put(SMTStatic.toString(map.get("pCode")),SMTStatic.toString(map.get("cCode")));
}
}