前不久的项目时间紧张,为了尽快完成原型开发,写了一段效率相当低的代码。

最近几天闲下来,主动把之前的代码优化了一下:)

 

标签:Java、Mybatis、MySQL

概况:本地系统从另外一个系统得到实体类集合List<UserEvent>,但是实体中只有eventId信息,其他属性值均为空。

需要从数据库中查询数据,完善List<UserEvent>的信息并返回。

相关业务表以及对应的实体类,如下图。(为了回避项目信息,相关业务内容均省略,以下表名、实体名、代码变量名等均用字母ABC代替。)

Android培训,安卓培训,手机开发培训,移动开发培训,云培训培训

原处理

1.先来看代码,乍一看逻辑清晰,符合正常思维习惯。

但是仔细查看发现,for循环中的每步处理都和数据查询有关。假设有10次循环,每次循环中有4次数据库连接查询,一共需要连接数据库40次。

每次数据库连接都需要一定的开销,随着循环量不断增加,处理时间将成倍增长,造成资源浪费。

Android培训,安卓培训,手机开发培训,移动开发培训,云培训培训

 1  String eventId = ""; 2  String aTime = ""; 3  for (UserEvent event : userEventList) { 4       eventId = event.getEventId(); 5    6       // 获取业务B信息 7       List<EntityB> listB = mapperB.selectBInfoByEventId(eventId); 8       event.setListB(listB); 9   10      // 获取业务C信息11      List<EntityC> listC = mapperC.selectCInfoByEventId(eventId);12      event.setListC(listC);13  14      // 查看是否有业务B处理15      EntityB entityB = mapperB.selectBInfoByPrimary(phone, eventId);16      event.setIsActionB(null == entityB ? "false" : "true");17  18      // 获取业务A和用户信息19      User userInfo = mapperA.selectEventUserInfoByEventId(eventId);20&